diff --git a/chunk_server.go b/chunk_server.go
index 8238a73..87b2006 100644
--- a/chunk_server.go
+++ b/chunk_server.go
@@ -14,7 +14,7 @@
 	"github.com/giolekva/pcloud/chunk"
 )
 
-var masterAddress = flag.String("master", "localhost:123", "Metadata storage address.")
+var controllerAddress = flag.String("controller", "localhost:123", "Metadata storage address.")
 var selfAddress = flag.String("self", "", "Metadata storage address.")
 
 func main() {
@@ -25,9 +25,9 @@
 	var opts []grpc.DialOption
 	opts = append(opts, grpc.WithInsecure())
 	opts = append(opts, grpc.WithBlock())
-	conn, err := grpc.Dial(*masterAddress, opts...)
+	conn, err := grpc.Dial(*controllerAddress, opts...)
 	if err != nil {
-		log.Fatalf("Failed to dial %s: %v", *masterAddress, err)
+		log.Fatalf("Failed to dial %s: %v", *controllerAddress, err)
 	}
 	defer conn.Close()
 	client := api.NewMetadataStorageClient(conn)
diff --git a/client.go b/client.go
index b908552..eea744b 100644
--- a/client.go
+++ b/client.go
@@ -11,7 +11,7 @@
 	"github.com/giolekva/pcloud/client"
 )
 
-var masterAddress = flag.String("master", "localhost:123", "Metadata storage address.")
+var controllerAddress = flag.String("controller", "localhost:123", "Metadata storage address.")
 var fileToUpload = flag.String("file", "", "File path to upload.")
 
 func main() {
@@ -20,9 +20,9 @@
 	var opts []grpc.DialOption
 	opts = append(opts, grpc.WithInsecure())
 	opts = append(opts, grpc.WithBlock())
-	conn, err := grpc.Dial(*masterAddress, opts...)
+	conn, err := grpc.Dial(*controllerAddress, opts...)
 	if err != nil {
-		log.Fatalf("Failed to dial %s: %v", *masterAddress, err)
+		log.Fatalf("Failed to dial %s: %v", *controllerAddress, err)
 	}
 	defer conn.Close()
 	uploader := client.NewFileUploader(api.NewMetadataStorageClient(conn))
diff --git a/client/client_test.go b/client/client_test.go
index ecf4938..9e2f7c6 100644
--- a/client/client_test.go
+++ b/client/client_test.go
@@ -20,7 +20,7 @@
 	var opts []grpc.DialOption
 	opts = append(opts, grpc.WithInsecure())
 	opts = append(opts, grpc.WithBlock())
-	conn, err := grpc.Dial("unix:///tmp/pcloud/master", opts...)
+	conn, err := grpc.Dial("unix:///tmp/pcloud/controller", opts...)
 	if err != nil {
 		t.Error(err)
 	}
@@ -46,7 +46,7 @@
 	var opts []grpc.DialOption
 	opts = append(opts, grpc.WithInsecure())
 	opts = append(opts, grpc.WithBlock())
-	conn, err := grpc.Dial("unix:///tmp/pcloud/master", opts...)
+	conn, err := grpc.Dial("unix:///tmp/pcloud/controller", opts...)
 	if err != nil {
 		t.Error(err)
 	}
diff --git a/controller/chunk.go b/controller/chunk.go
index b3acd61..6bcb61a 100644
--- a/controller/chunk.go
+++ b/controller/chunk.go
@@ -1,4 +1,4 @@
-package master
+package controller
 
 import (
 	"github.com/giolekva/pcloud/api"
diff --git a/controller/server.go b/controller/server.go
index 5e648cf..573790c 100644
--- a/controller/server.go
+++ b/controller/server.go
@@ -1,4 +1,4 @@
-package master
+package controller
 
 import (
 	"context"
diff --git a/master.go b/master.go
index 1b791c0..79a5275 100644
--- a/master.go
+++ b/master.go
@@ -9,7 +9,7 @@
 	"google.golang.org/grpc"
 
 	"github.com/giolekva/pcloud/api"
-	"github.com/giolekva/pcloud/master"
+	"github.com/giolekva/pcloud/controller"
 )
 
 var port = flag.Int("port", 123, "Port to listen on.")
@@ -23,7 +23,7 @@
 	}
 	log.Printf("Listening on port: %d", *port)
 	server := grpc.NewServer()
-	api.RegisterMetadataStorageServer(server, master.NewMasterServer())
+	api.RegisterMetadataStorageServer(server, controller.NewMasterServer())
 	log.Print("Master serving")
 	server.Serve(lis)
 }
diff --git a/testing/in_memory_env.go b/testing/in_memory_env.go
index e2aace3..3daeecf 100644
--- a/testing/in_memory_env.go
+++ b/testing/in_memory_env.go
@@ -11,34 +11,34 @@
 
 	"github.com/giolekva/pcloud/api"
 	"github.com/giolekva/pcloud/chunk"
-	"github.com/giolekva/pcloud/master"
+	"github.com/giolekva/pcloud/controller"
 )
 
 type InMemoryEnv struct {
 	m          *grpc.Server
 	c          []*grpc.Server
-	masterConn *grpc.ClientConn
+	controllerConn *grpc.ClientConn
 }
 
 func NewInMemoryEnv(numChunkServers int) (*InMemoryEnv, error) {
 	env := new(InMemoryEnv)
-	syscall.Unlink("/tmp/pcloud/master")
-	lis, err := net.Listen("unix", "/tmp/pcloud/master")
+	syscall.Unlink("/tmp/pcloud/controller")
+	lis, err := net.Listen("unix", "/tmp/pcloud/controller")
 	if err != nil {
 		return nil, err
 	}
 	server := grpc.NewServer()
-	api.RegisterMetadataStorageServer(server, master.NewMasterServer())
+	api.RegisterMetadataStorageServer(server, controller.NewMasterServer())
 	go server.Serve(lis)
 
 	var opts []grpc.DialOption
 	opts = append(opts, grpc.WithInsecure())
 	opts = append(opts, grpc.WithBlock())
-	conn, err := grpc.Dial("unix:/tmp/pcloud/master", opts...)
+	conn, err := grpc.Dial("unix:/tmp/pcloud/controller", opts...)
 	if err != nil {
 		return nil, err
 	}
-	env.masterConn = conn
+	env.controllerConn = conn
 	client := api.NewMetadataStorageClient(conn)
 
 	env.c = make([]*grpc.Server, numChunkServers)
@@ -70,8 +70,8 @@
 }
 
 func (e *InMemoryEnv) Stop() {
-	if e.masterConn != nil {
-		e.masterConn.Close()
+	if e.controllerConn != nil {
+		e.controllerConn.Close()
 	}
 	for _, s := range e.c {
 		if s != nil {
