diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/purge.go b/src/github.com/turt2live/matrix-media-repo/api/custom/purge.go
similarity index 91%
rename from src/github.com/turt2live/matrix-media-repo/api/r0/purge.go
rename to src/github.com/turt2live/matrix-media-repo/api/custom/purge.go
index 18049839271057ff20bf70a6026d808d7cbbd74c..fb0a77cbbd72f587d1d49380a492e541d7cf3d4c 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/purge.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/custom/purge.go
@@ -1,4 +1,4 @@
-package r0
+package custom
 
 import (
 	"net/http"
@@ -6,7 +6,7 @@ import (
 
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
-	"github.com/turt2live/matrix-media-repo/services/media_service"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service"
 )
 
 type MediaPurgedResponse struct {
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/quarantine.go b/src/github.com/turt2live/matrix-media-repo/api/custom/quarantine.go
similarity index 95%
rename from src/github.com/turt2live/matrix-media-repo/api/r0/quarantine.go
rename to src/github.com/turt2live/matrix-media-repo/api/custom/quarantine.go
index f7d5ba980ba4ed018726dc6bbbfa063e000e5061..edc736b9546b334b68665bea6188de9f6839545b 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/quarantine.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/custom/quarantine.go
@@ -1,4 +1,4 @@
-package r0
+package custom
 
 import (
 	"context"
@@ -8,10 +8,10 @@ import (
 	"github.com/gorilla/mux"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/matrix"
-	"github.com/turt2live/matrix-media-repo/media_cache"
-	"github.com/turt2live/matrix-media-repo/services/media_service"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service"
 	"github.com/turt2live/matrix-media-repo/util"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/download.go b/src/github.com/turt2live/matrix-media-repo/api/r0/download.go
index ea0ca6f05d81e2f8c14523d664267a6ac5ce9d61..6914c4f2824ba4f18960b52a704ff5ed88bd713f 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/download.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/r0/download.go
@@ -9,7 +9,7 @@ import (
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/media_cache"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache"
 	"github.com/turt2live/matrix-media-repo/util"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/identicon.go b/src/github.com/turt2live/matrix-media-repo/api/r0/identicon.go
index 82f2ab76743530b18590b3073325ded949886add..7cda644e002659b65572fa6221715c08c50ef031 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/identicon.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/r0/identicon.go
@@ -13,7 +13,7 @@ import (
 	"github.com/gorilla/mux"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/util"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/preview_url.go b/src/github.com/turt2live/matrix-media-repo/api/r0/preview_url.go
index e023ae84067fd53c8ea8a4aed638129696056222..f40816cb6d3a46974579dbb9aec349bd187aee66 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/preview_url.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/r0/preview_url.go
@@ -8,8 +8,8 @@ import (
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/services/url_service"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service"
 	"github.com/turt2live/matrix-media-repo/util"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/thumbnail.go b/src/github.com/turt2live/matrix-media-repo/api/r0/thumbnail.go
index d69efcba6ddd81e923849d5edff193522d57bfff..53256a0cd742b62c8fe69f1845b8275f0a0d7d10 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/thumbnail.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/r0/thumbnail.go
@@ -8,8 +8,8 @@ import (
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/media_cache"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache"
 	"github.com/turt2live/matrix-media-repo/util"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/upload.go b/src/github.com/turt2live/matrix-media-repo/api/r0/upload.go
index cf83e75c39ae4e1f305862d939dcf122a7ae17aa..ad7bdc40466ad5e79e519e73bcced5145c8c4e44 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/upload.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/r0/upload.go
@@ -8,7 +8,7 @@ import (
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/services/media_service"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service"
 )
 
 type MediaUploadedResponse struct {
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/info.go b/src/github.com/turt2live/matrix-media-repo/api/unstable/info.go
similarity index 95%
rename from src/github.com/turt2live/matrix-media-repo/api/r0/info.go
rename to src/github.com/turt2live/matrix-media-repo/api/unstable/info.go
index 1453db55d07000369ab91ccd1e5c881ef87e8694..fa3c2b83a38f478c1e8cb525dc68dc8f3550560f 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/info.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/unstable/info.go
@@ -1,4 +1,4 @@
-package r0
+package unstable
 
 import (
 	"net/http"
@@ -9,7 +9,7 @@ import (
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/media_cache"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache"
 )
 
 type MediaInfoResponse struct {
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/limits.go b/src/github.com/turt2live/matrix-media-repo/api/unstable/limits.go
similarity index 87%
rename from src/github.com/turt2live/matrix-media-repo/api/r0/limits.go
rename to src/github.com/turt2live/matrix-media-repo/api/unstable/limits.go
index c4527b5f2102db61a072fb0c1c2f9ddc0d85979a..fb5ae8fcb024076d28871a09fd19f7a9657f2b87 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/limits.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/unstable/limits.go
@@ -1,11 +1,11 @@
-package r0
+package unstable
 
 import (
 	"net/http"
 
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 )
 
 type LimitsResponse struct {
diff --git a/src/github.com/turt2live/matrix-media-repo/api/r0/local_copy.go b/src/github.com/turt2live/matrix-media-repo/api/unstable/local_copy.go
similarity index 85%
rename from src/github.com/turt2live/matrix-media-repo/api/r0/local_copy.go
rename to src/github.com/turt2live/matrix-media-repo/api/unstable/local_copy.go
index df9e677f571232ea65c6a5277acd601c1ba83bea..137f98b06569181ab9afb4af457202f2618f3616 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/r0/local_copy.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/unstable/local_copy.go
@@ -1,4 +1,4 @@
-package r0
+package unstable
 
 import (
 	"net/http"
@@ -7,9 +7,10 @@ import (
 	"github.com/gorilla/mux"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
+	"github.com/turt2live/matrix-media-repo/api/r0"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/media_cache"
-	"github.com/turt2live/matrix-media-repo/services/media_service"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service"
 )
 
 func LocalCopy(r *http.Request, log *logrus.Entry, user api.UserInfo) interface{} {
@@ -55,7 +56,7 @@ func LocalCopy(r *http.Request, log *logrus.Entry, user api.UserInfo) interface{
 
 	// Don't clone the media if it's already available on this domain
 	if streamedMedia.Media.Origin == r.Host {
-		return &MediaUploadedResponse{streamedMedia.Media.MxcUri()}
+		return &r0.MediaUploadedResponse{streamedMedia.Media.MxcUri()}
 	}
 
 	newMedia, err := svc.StoreMedia(streamedMedia.Stream, streamedMedia.Media.ContentType, streamedMedia.Media.UploadName, user.UserId, r.Host, "")
@@ -68,5 +69,5 @@ func LocalCopy(r *http.Request, log *logrus.Entry, user api.UserInfo) interface{
 		return api.InternalServerError("Unexpected Error")
 	}
 
-	return &MediaUploadedResponse{newMedia.MxcUri()}
+	return &r0.MediaUploadedResponse{newMedia.MxcUri()}
 }
diff --git a/src/github.com/turt2live/matrix-media-repo/api/webserver/webserver.go b/src/github.com/turt2live/matrix-media-repo/api/webserver/webserver.go
index 2cc858eff00c1d4490996a2c8bca0bd5bcdcd352..f84d440fbbca514b6e2b949c54c95a6a5d7c5b20 100644
--- a/src/github.com/turt2live/matrix-media-repo/api/webserver/webserver.go
+++ b/src/github.com/turt2live/matrix-media-repo/api/webserver/webserver.go
@@ -10,8 +10,10 @@ import (
 	"github.com/gorilla/mux"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api"
+	"github.com/turt2live/matrix-media-repo/api/custom"
 	"github.com/turt2live/matrix-media-repo/api/r0"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/api/unstable"
+	"github.com/turt2live/matrix-media-repo/common/config"
 )
 
 type route struct {
@@ -29,15 +31,15 @@ func Init() {
 	thumbnailHandler := handler{api.AccessTokenOptionalRoute(r0.ThumbnailMedia), counter}
 	previewUrlHandler := handler{api.AccessTokenRequiredRoute(r0.PreviewUrl), counter}
 	identiconHandler := handler{api.AccessTokenOptionalRoute(r0.Identicon), counter}
-	purgeHandler := handler{api.RepoAdminRoute(r0.PurgeRemoteMedia), counter}
-	quarantineHandler := handler{api.AccessTokenRequiredRoute(r0.QuarantineMedia), counter}
-	quarantineRoomHandler := handler{api.AccessTokenRequiredRoute(r0.QuarantineRoomMedia), counter}
-	localCopyHandler := handler{api.AccessTokenRequiredRoute(r0.LocalCopy), counter}
-	infoHandler := handler{api.AccessTokenRequiredRoute(r0.MediaInfo), counter}
-	limitsHandler := handler{api.AccessTokenRequiredRoute(r0.Limits), counter}
+	purgeHandler := handler{api.RepoAdminRoute(custom.PurgeRemoteMedia), counter}
+	quarantineHandler := handler{api.AccessTokenRequiredRoute(custom.QuarantineMedia), counter}
+	quarantineRoomHandler := handler{api.AccessTokenRequiredRoute(custom.QuarantineRoomMedia), counter}
+	localCopyHandler := handler{api.AccessTokenRequiredRoute(unstable.LocalCopy), counter}
+	infoHandler := handler{api.AccessTokenRequiredRoute(unstable.MediaInfo), counter}
+	limitsHandler := handler{api.AccessTokenRequiredRoute(unstable.Limits), counter}
 
 	routes := make(map[string]route)
-	versions := []string{"r0", "v1"} // r0 is typically clients and v1 is typically servers. v1 is deprecated.
+	versions := []string{"r0", "v1", "unstable"} // r0 is typically clients and v1 is typically servers. v1 is deprecated.
 
 	for _, version := range versions {
 		// Standard routes we have to handle
@@ -47,18 +49,21 @@ func Init() {
 		routes["/_matrix/media/"+version+"/thumbnail/{server:[a-zA-Z0-9.:\\-_]+}/{mediaId:[a-zA-Z0-9.\\-_]+}"] = route{"GET", thumbnailHandler}
 		routes["/_matrix/media/"+version+"/preview_url"] = route{"GET", previewUrlHandler}
 		routes["/_matrix/media/"+version+"/identicon/{seed:.*}"] = route{"GET", identiconHandler}
-		routes["/_matrix/media/"+version+"/limits"] = route{"GET", limitsHandler}
 
 		// Routes that we define but are not part of the spec
 		routes["/_matrix/media/"+version+"/admin/purge_remote"] = route{"POST", purgeHandler}
 		routes["/_matrix/media/"+version+"/admin/quarantine/{server:[a-zA-Z0-9.:\\-_]+}/{mediaId:[a-zA-Z0-9.\\-_]+}"] = route{"POST", quarantineHandler}
 		routes["/_matrix/media/"+version+"/admin/room/{roomId:[^/]+}/quarantine"] = route{"POST", quarantineRoomHandler}
-		routes["/_matrix/media/"+version+"/local_copy/{server:[a-zA-Z0-9.:\\-_]+}/{mediaId:[a-zA-Z0-9.\\-_]+}"] = route{"GET", localCopyHandler}
-		routes["/_matrix/media/"+version+"/info/{server:[a-zA-Z0-9.:\\-_]+}/{mediaId:[a-zA-Z0-9.\\-_]+}"] = route{"GET", infoHandler}
 
 		// Routes that we should handle but aren't in the media namespace
 		routes["/_matrix/client/"+version+"/admin/purge_media_cache"] = route{"POST", purgeHandler}
 		routes["/_matrix/client/"+version+"/admin/quarantine_media/{roomId:[^/]+}"] = route{"POST", quarantineRoomHandler}
+
+		if version == "unstable" {
+			routes["/_matrix/media/"+version+"/limits"] = route{"GET", limitsHandler}
+			routes["/_matrix/media/"+version+"/local_copy/{server:[a-zA-Z0-9.:\\-_]+}/{mediaId:[a-zA-Z0-9.\\-_]+}"] = route{"GET", localCopyHandler}
+			routes["/_matrix/media/"+version+"/info/{server:[a-zA-Z0-9.:\\-_]+}/{mediaId:[a-zA-Z0-9.\\-_]+}"] = route{"GET", infoHandler}
+		}
 	}
 
 	for routePath, route := range routes {
diff --git a/src/github.com/turt2live/matrix-media-repo/cmd/import_synapse/main.go b/src/github.com/turt2live/matrix-media-repo/cmd/import_synapse/main.go
index f00294f83c0799a5768f51a55a038b007fda13c0..1aec34f31ebd87cae6ccd695e643b0c4a5f88510 100644
--- a/src/github.com/turt2live/matrix-media-repo/cmd/import_synapse/main.go
+++ b/src/github.com/turt2live/matrix-media-repo/cmd/import_synapse/main.go
@@ -14,9 +14,9 @@ import (
 	"github.com/howeyc/gopass"
 	"github.com/jeffail/tunny"
 	"github.com/sirupsen/logrus"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/logging"
-	"github.com/turt2live/matrix-media-repo/services/media_service"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/common/logging"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service"
 	"github.com/turt2live/matrix-media-repo/synapse"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/cmd/media_repo/main.go b/src/github.com/turt2live/matrix-media-repo/cmd/media_repo/main.go
index d0e8d466b09e2ee13f8885d353df48f034856967..582e950bede12240b42276ad4c662aca681a7b56 100644
--- a/src/github.com/turt2live/matrix-media-repo/cmd/media_repo/main.go
+++ b/src/github.com/turt2live/matrix-media-repo/cmd/media_repo/main.go
@@ -5,8 +5,8 @@ import (
 
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/api/webserver"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/logging"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/common/logging"
 )
 
 func main() {
diff --git a/src/github.com/turt2live/matrix-media-repo/config/config.go b/src/github.com/turt2live/matrix-media-repo/common/config/config.go
similarity index 100%
rename from src/github.com/turt2live/matrix-media-repo/config/config.go
rename to src/github.com/turt2live/matrix-media-repo/common/config/config.go
diff --git a/src/github.com/turt2live/matrix-media-repo/logging/logger.go b/src/github.com/turt2live/matrix-media-repo/common/logging/logger.go
similarity index 100%
rename from src/github.com/turt2live/matrix-media-repo/logging/logger.go
rename to src/github.com/turt2live/matrix-media-repo/common/logging/logger.go
diff --git a/src/github.com/turt2live/matrix-media-repo/matrix/matrix.go b/src/github.com/turt2live/matrix-media-repo/matrix/matrix.go
index 2155e3552a4d66346611a3323948e2f884cec5fa..79a21a9f47f271dafa1cdf41d7c21aa1078c781c 100644
--- a/src/github.com/turt2live/matrix-media-repo/matrix/matrix.go
+++ b/src/github.com/turt2live/matrix-media-repo/matrix/matrix.go
@@ -6,7 +6,7 @@ import (
 	"github.com/matrix-org/gomatrix"
 	"github.com/rubyist/circuitbreaker"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/util"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/media_cache/base_cache.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/base_cache.go
similarity index 99%
rename from src/github.com/turt2live/matrix-media-repo/media_cache/base_cache.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/base_cache.go
index f9f04450ea3c4e58c94bf0616d5bf63b72e357ef..2ed6a823c6989751dae7df27d064d149682a57d4 100644
--- a/src/github.com/turt2live/matrix-media-repo/media_cache/base_cache.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/base_cache.go
@@ -9,7 +9,7 @@ import (
 
 	"github.com/patrickmn/go-cache"
 	"github.com/sirupsen/logrus"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/util"
 	"github.com/turt2live/matrix-media-repo/util/download_tracker"
 )
diff --git a/src/github.com/turt2live/matrix-media-repo/media_cache/cache_types.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/cache_types.go
similarity index 100%
rename from src/github.com/turt2live/matrix-media-repo/media_cache/cache_types.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/cache_types.go
diff --git a/src/github.com/turt2live/matrix-media-repo/media_cache/media_cache.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/media_cache.go
similarity index 96%
rename from src/github.com/turt2live/matrix-media-repo/media_cache/media_cache.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/media_cache.go
index f8afd1ff958ec56e0bff2fe9926a42d7b3864ea5..2d69a57e8740670718dbb1a728c32c662e3a1895 100644
--- a/src/github.com/turt2live/matrix-media-repo/media_cache/media_cache.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/media_cache.go
@@ -11,8 +11,8 @@ import (
 	"github.com/pkg/errors"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/services/media_service"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service"
 	"github.com/turt2live/matrix-media-repo/types"
 	"github.com/turt2live/matrix-media-repo/util"
 )
diff --git a/src/github.com/turt2live/matrix-media-repo/media_cache/thumbnail_cache.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/thumbnail_cache.go
similarity index 98%
rename from src/github.com/turt2live/matrix-media-repo/media_cache/thumbnail_cache.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/thumbnail_cache.go
index c455d1e1a73fa85f6ef40d61c97fa5e8b1d0b877..42a1dc04687cb06543731be47cca0db9ee4afef0 100644
--- a/src/github.com/turt2live/matrix-media-repo/media_cache/thumbnail_cache.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/media_cache/thumbnail_cache.go
@@ -13,8 +13,8 @@ import (
 	"github.com/patrickmn/go-cache"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/services/thumbnail_service"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service"
 	"github.com/turt2live/matrix-media-repo/types"
 	"github.com/turt2live/matrix-media-repo/util"
 )
diff --git a/src/github.com/turt2live/matrix-media-repo/resource_handler/handler.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/resource_handler/handler.go
similarity index 100%
rename from src/github.com/turt2live/matrix-media-repo/resource_handler/handler.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/resource_handler/handler.go
diff --git a/src/github.com/turt2live/matrix-media-repo/services/media_service/media_service.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/media_service.go
similarity index 99%
rename from src/github.com/turt2live/matrix-media-repo/services/media_service/media_service.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/media_service.go
index 2ea144811243bd7b4b2b3d5e826c8c1b2f4f2f9b..146c27ea1688d13dceb1dc646a2d19526d22fb69 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/media_service/media_service.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/media_service.go
@@ -10,7 +10,7 @@ import (
 	"github.com/ryanuber/go-glob"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/storage"
 	"github.com/turt2live/matrix-media-repo/storage/stores"
 	"github.com/turt2live/matrix-media-repo/types"
diff --git a/src/github.com/turt2live/matrix-media-repo/services/media_service/remote_media_downloader.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/remote_media_downloader.go
similarity index 98%
rename from src/github.com/turt2live/matrix-media-repo/services/media_service/remote_media_downloader.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/remote_media_downloader.go
index 62e70086c4ab741c24b74b1ff0bdd4bf76c9d3a3..14013bd5fb36d527b60157512c423962a8fdb561 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/media_service/remote_media_downloader.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/remote_media_downloader.go
@@ -12,7 +12,7 @@ import (
 	"github.com/patrickmn/go-cache"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/matrix"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/services/media_service/resource_handler.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/resource_handler.go
similarity index 93%
rename from src/github.com/turt2live/matrix-media-repo/services/media_service/resource_handler.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/resource_handler.go
index 40903d177a6292ff2dd27946261fe1e5aeefb3b3..b823277d210f5591adf6ae620ae65d09daaa1d8c 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/media_service/resource_handler.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service/resource_handler.go
@@ -5,8 +5,8 @@ import (
 	"sync"
 
 	"github.com/sirupsen/logrus"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/resource_handler"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/resource_handler"
 	"github.com/turt2live/matrix-media-repo/types"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/resource_handler.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/resource_handler.go
similarity index 95%
rename from src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/resource_handler.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/resource_handler.go
index fe92b39e689778c5c01b153cbe2926a2bb6935b8..56a28eca325a7a83cb5e96a2c4c08f1f44bf74c4 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/resource_handler.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/resource_handler.go
@@ -6,8 +6,8 @@ import (
 	"sync"
 
 	"github.com/sirupsen/logrus"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/resource_handler"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/resource_handler"
 	"github.com/turt2live/matrix-media-repo/types"
 	"github.com/turt2live/matrix-media-repo/util"
 )
diff --git a/src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/svg.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/svg.go
similarity index 100%
rename from src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/svg.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/svg.go
diff --git a/src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/thumbnail_service.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/thumbnail_service.go
similarity index 98%
rename from src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/thumbnail_service.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/thumbnail_service.go
index 201a0bea9e9df209fb86a799b5347ba37edddd8a..40b8e61f4dd6e0ffa07925f1c2d04145ab0743ed 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/thumbnail_service.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/thumbnail_service.go
@@ -13,7 +13,7 @@ import (
 	"github.com/golang/freetype/truetype"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/storage"
 	"github.com/turt2live/matrix-media-repo/storage/stores"
 	"github.com/turt2live/matrix-media-repo/types"
diff --git a/src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/thumbnailer.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/thumbnailer.go
similarity index 99%
rename from src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/thumbnailer.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/thumbnailer.go
index cc39d3af1d4e38e990845f76c653b2f2261a471f..dab744a33c0331caea2dced3bef086f74fe3fc02 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/thumbnail_service/thumbnailer.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/thumbnail_service/thumbnailer.go
@@ -11,7 +11,7 @@ import (
 
 	"github.com/disintegration/imaging"
 	"github.com/sirupsen/logrus"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/storage"
 	"github.com/turt2live/matrix-media-repo/types"
 	"github.com/turt2live/matrix-media-repo/util"
diff --git a/src/github.com/turt2live/matrix-media-repo/services/url_service/file_previewer.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/file_previewer.go
similarity index 98%
rename from src/github.com/turt2live/matrix-media-repo/services/url_service/file_previewer.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/file_previewer.go
index 3871fb608b6d5c90cb3d37217bf1f49a5aa386f3..5f24855c2840d8b4c775431da5b7977f26fd8458 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/url_service/file_previewer.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/file_previewer.go
@@ -13,7 +13,7 @@ import (
 	"github.com/ryanuber/go-glob"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/util"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/services/url_service/opengraph_previewer.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/opengraph_previewer.go
similarity index 99%
rename from src/github.com/turt2live/matrix-media-repo/services/url_service/opengraph_previewer.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/opengraph_previewer.go
index 02120c5aa55f4219b8a4c9b983f6fcc3655f00dd..7bf638f5a9c9ccb3ef6ac01e59b066bf7fb7eb29 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/url_service/opengraph_previewer.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/opengraph_previewer.go
@@ -16,7 +16,7 @@ import (
 	"github.com/ryanuber/go-glob"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 )
 
 var ogSupportedTypes = []string{"text/*"}
diff --git a/src/github.com/turt2live/matrix-media-repo/services/url_service/preview_utils.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/preview_utils.go
similarity index 100%
rename from src/github.com/turt2live/matrix-media-repo/services/url_service/preview_utils.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/preview_utils.go
diff --git a/src/github.com/turt2live/matrix-media-repo/services/url_service/resource_handler.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/resource_handler.go
similarity index 95%
rename from src/github.com/turt2live/matrix-media-repo/services/url_service/resource_handler.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/resource_handler.go
index a7eae80b4772cfa82cc58f83120964f63993bbd5..5a34e1080221668c793e835179668c7af2e97570 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/url_service/resource_handler.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/resource_handler.go
@@ -8,9 +8,9 @@ import (
 	"github.com/disintegration/imaging"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
-	"github.com/turt2live/matrix-media-repo/resource_handler"
-	"github.com/turt2live/matrix-media-repo/services/media_service"
+	"github.com/turt2live/matrix-media-repo/common/config"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/resource_handler"
+	"github.com/turt2live/matrix-media-repo/old_middle_layer/services/media_service"
 	"github.com/turt2live/matrix-media-repo/types"
 	"github.com/turt2live/matrix-media-repo/util"
 )
diff --git a/src/github.com/turt2live/matrix-media-repo/services/url_service/url_service.go b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/url_service.go
similarity index 98%
rename from src/github.com/turt2live/matrix-media-repo/services/url_service/url_service.go
rename to src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/url_service.go
index a5207885a75825f1ebc01849e1f16351f0bfa204..f17c4b1fdfbd9acc855e6c0125f6420fa3766ac8 100644
--- a/src/github.com/turt2live/matrix-media-repo/services/url_service/url_service.go
+++ b/src/github.com/turt2live/matrix-media-repo/old_middle_layer/services/url_service/url_service.go
@@ -10,7 +10,7 @@ import (
 	"github.com/pkg/errors"
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/storage"
 	"github.com/turt2live/matrix-media-repo/storage/stores"
 	"github.com/turt2live/matrix-media-repo/types"
diff --git a/src/github.com/turt2live/matrix-media-repo/storage/file_store.go b/src/github.com/turt2live/matrix-media-repo/storage/file_store.go
index a246ed4c0dc470da0a13ffdee16fccffac25b755..1a9d82c29964ef77dfdf047f2dbb8cd5b0417ac2 100644
--- a/src/github.com/turt2live/matrix-media-repo/storage/file_store.go
+++ b/src/github.com/turt2live/matrix-media-repo/storage/file_store.go
@@ -10,7 +10,7 @@ import (
 	"path"
 
 	"github.com/sirupsen/logrus"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/util"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/storage/storage.go b/src/github.com/turt2live/matrix-media-repo/storage/storage.go
index 99f36621d66000b5a9ff84df3b72486f3cfe56ea..5d509d2eb99f66029fc8da40bf65585313a1b89e 100644
--- a/src/github.com/turt2live/matrix-media-repo/storage/storage.go
+++ b/src/github.com/turt2live/matrix-media-repo/storage/storage.go
@@ -8,7 +8,7 @@ import (
 	"github.com/DavidHuie/gomigrate"
 	_ "github.com/lib/pq" // postgres driver
 	"github.com/sirupsen/logrus"
-	"github.com/turt2live/matrix-media-repo/config"
+	"github.com/turt2live/matrix-media-repo/common/config"
 	"github.com/turt2live/matrix-media-repo/storage/stores"
 )
 
diff --git a/src/github.com/turt2live/matrix-media-repo/util/config.go b/src/github.com/turt2live/matrix-media-repo/util/config.go
index 98f51e654f1e9bb6b5adba5994587b4d51bd7311..3a4e8451ba587ea75ee0209fd5583816b6f70e3e 100644
--- a/src/github.com/turt2live/matrix-media-repo/util/config.go
+++ b/src/github.com/turt2live/matrix-media-repo/util/config.go
@@ -1,6 +1,6 @@
 package util
 
-import "github.com/turt2live/matrix-media-repo/config"
+import "github.com/turt2live/matrix-media-repo/common/config"
 
 func IsServerOurs(server string) (bool) {
 	hs := GetHomeserverConfig(server)