diff --git a/cmd/rove-accountant/main.go b/cmd/rove-accountant/main.go
index 767f1f4..ff5036d 100644
--- a/cmd/rove-accountant/main.go
+++ b/cmd/rove-accountant/main.go
@@ -2,10 +2,12 @@ package main
 
 import (
 	"context"
+	"fmt"
 	"log"
 	"net"
 	"os"
 	"os/signal"
+	"strconv"
 	"sync"
 	"syscall"
 
@@ -81,9 +83,13 @@ func (a *accountantServer) GetValue(_ context.Context, in *accounts.DataKey) (*a
 // main
 func main() {
 	// Verify the input
-	var address = os.Getenv("ROVE_ACCOUNTANT_GRPC")
-	if len(address) == 0 {
-		log.Fatal("No address set with $ROVE_ACCOUNTANT_GRPC")
+	var port = os.Getenv("PORT")
+	if len(port) == 0 {
+		log.Fatal("Must set $PORT")
+	}
+	iport, err := strconv.Atoi(port)
+	if err != nil {
+		log.Fatal("$PORT not valid int")
 	}
 
 	persistence.SetPath(data)
@@ -95,7 +101,7 @@ func main() {
 	}
 
 	// Set up the RPC server and register
-	lis, err := net.Listen("tcp", address)
+	lis, err := net.Listen("tcp", fmt.Sprintf(":%d", iport))
 	if err != nil {
 		log.Fatalf("failed to listen: %v", err)
 	}
@@ -114,7 +120,7 @@ func main() {
 	}()
 
 	// Serve the RPC server
-	log.Printf("Serving accountant on %s\n", address)
+	log.Printf("Serving accountant on %s\n", port)
 	if err := grpcServer.Serve(lis); err != nil {
 		log.Fatalf("failed to serve gRPC: %s", err)
 	}
diff --git a/cmd/rove-reverse-proxy/main.go b/cmd/rove-reverse-proxy/main.go
index 8eeb5b9..eaedc69 100644
--- a/cmd/rove-reverse-proxy/main.go
+++ b/cmd/rove-reverse-proxy/main.go
@@ -6,6 +6,7 @@ import (
 	"log"
 	"net/http"
 	"os"
+	"strconv"
 
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"google.golang.org/grpc"
@@ -23,13 +24,17 @@ func main() {
 		log.Fatal("Must set $ROVE_GRPC")
 	}
 
-	var address = os.Getenv("ROVE_HTTP")
-	if len(address) == 0 {
-		log.Fatal("Must set $ROVE_HTTP")
+	var port = os.Getenv("PORT")
+	if len(port) == 0 {
+		log.Fatal("Must set $PORT")
+	}
+	iport, err := strconv.Atoi(port)
+	if err != nil {
+		log.Fatal("$PORT not valid int")
 	}
 
 	// Create a new mux and register it with the gRPC endpoint
-	fmt.Printf("Hosting reverse-proxy on %s for %s\n", address, endpoint)
+	fmt.Printf("Hosting reverse-proxy on %d for %s\n", iport, endpoint)
 	mux := runtime.NewServeMux()
 	opts := []grpc.DialOption{grpc.WithInsecure()}
 	if err := rove.RegisterRoveHandlerFromEndpoint(ctx, mux, endpoint, opts); err != nil {
@@ -37,7 +42,7 @@ func main() {
 	}
 
 	// Start the HTTP server and proxy calls to gRPC endpoint when needed
-	if err := http.ListenAndServe(address, mux); err != nil {
+	if err := http.ListenAndServe(fmt.Sprintf(":%d", iport), mux); err != nil {
 		log.Fatal(err)
 	}
 }
diff --git a/cmd/rove-server/main.go b/cmd/rove-server/main.go
index cb489da..83ec280 100644
--- a/cmd/rove-server/main.go
+++ b/cmd/rove-server/main.go
@@ -2,6 +2,7 @@ package main
 
 import (
 	"flag"
+	"fmt"
 	"log"
 	"os"
 	"os/signal"
@@ -31,11 +32,14 @@ func InnerMain() {
 	}
 
 	// Address to host the server on, automatically selected if empty
-	var address = os.Getenv("ROVE_GRPC")
-	if len(address) == 0 {
-		log.Fatalf("Must set $ROVE_GRPC")
+	var port = os.Getenv("PORT")
+	if len(port) == 0 {
+		log.Fatal("Must set $PORT")
+	}
+	iport, err := strconv.Atoi(port)
+	if err != nil {
+		log.Fatal("$PORT not valid int")
 	}
-
 	log.Printf("Initialising version %s...\n", version.Version)
 
 	// Set the persistence path
@@ -53,7 +57,7 @@ func InnerMain() {
 
 	// Create the server data
 	s := internal.NewServer(
-		internal.OptionAddress(address),
+		internal.OptionAddress(fmt.Sprintf(":%d", iport)),
 		internal.OptionPersistentData(),
 		internal.OptionTick(tickRate))
 
diff --git a/cmd/rove/main.go b/cmd/rove/main.go
index 79ca85c..3347afa 100644
--- a/cmd/rove/main.go
+++ b/cmd/rove/main.go
@@ -17,8 +17,6 @@ import (
 	"google.golang.org/grpc"
 )
 
-var USAGE = ""
-
 // Command usage
 func Usage() {
 	fmt.Fprintf(os.Stderr, "Usage: %s COMMAND [OPTIONS]...\n", os.Args[0])
@@ -36,6 +34,8 @@ func Usage() {
 var home = os.Getenv("HOME")
 var filepath = path.Join(home, ".local/share/rove.json")
 
+const gRPCport = 9090
+
 // General usage
 var ver = flag.Bool("version", false, "Display version number")
 var host = flag.String("host", "", "path to game host server")
@@ -94,7 +94,7 @@ func InnerMain(command string) error {
 	}
 
 	// Set up the server
-	clientConn, err := grpc.Dial(config.Host, grpc.WithInsecure())
+	clientConn, err := grpc.Dial(fmt.Sprintf("%s:%d", config.Host, gRPCport), grpc.WithInsecure())
 	if err != nil {
 		return err
 	}
diff --git a/docker-compose.yml b/docker-compose.yml
index 4e0f490..12b3dd8 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -12,7 +12,7 @@ services:
     ports:
       - "9091:9091"
     environment:
-      - ROVE_ACCOUNTANT_GRPC=:9091
+      - PORT=9091
       - DATA_PATH=/mnt/rove-server
     volumes:
       - persistent-data:/mnt/rove-server:rw
@@ -26,8 +26,8 @@ services:
     ports:
       - "8080:8080"
     environment:
-      - ROVE_HTTP=:8080
-      - ROVE_GRPC=:9090
+      - PORT=8080
+      - ROVE_GRPC=rove-server:9090
     command: [ ./rove-reverse-proxy ]
 
   rove-docs:
@@ -49,9 +49,9 @@ services:
     ports:
       - "9090:9090"
     environment:
-      - ROVE_GRPC=:9090
+      - PORT=9090
       - DATA_PATH=/mnt/rove-server
-      - ROVE_ACCOUNTANT_GRPC=:9091
+      - ROVE_ACCOUNTANT_GRPC=rove-accountant:9091
     volumes:
       - persistent-data:/mnt/rove-server:rw
 
@@ -62,7 +62,7 @@ services:
       dockerfile: Dockerfile
     image: rove:latest
     environment:
-      - ROVE_ACCOUNTANT_GRPC=:9091
+      - ROVE_ACCOUNTANT_GRPC=rove-accountant:9091
       - ROVE_GRPC=rove-server:9090
     command: [ "go", "test", "-v", "./...", "--tags=integration", "-cover", "-coverprofile=/mnt/coverage-data/c.out", "-count", "1" ]
     volumes: