diff --git a/client/client.go b/client/client.go
index 7a98d79..a578dea 100644
--- a/client/client.go
+++ b/client/client.go
@@ -16,7 +16,7 @@
 	return &FileUploader{client}
 }
 
-func (fu *FileUploader) Upload(f *os.File) {
+func (fu *FileUploader) Upload(f *os.File, numReplicas int) {
 	info, err := f.Stat()
 	if err != nil {
 		return
@@ -24,13 +24,13 @@
 	resp, err := fu.client.CreateBlob(
 		context.Background(), &api.CreateBlobRequest{
 			SizeBytes:   int32(info.Size()),
-			NumReplicas: 1})
-	if len(resp.Chunk) != 1 {
-		panic(resp)
-	}
+			NumReplicas: int32(numReplicas)})
 	if err != nil {
 		panic(err)
 	}
+	if len(resp.Chunk) != 1 {
+		panic(resp)
+	}
 	primaryListener := chunk.NewNonChangingPrimaryReplicaChangeListener(
 		resp.Chunk[0].ChunkId,
 		resp.Chunk[0].Server[0])
diff --git a/client/client_test.go b/client/client_test.go
index 21443d4..269f643 100644
--- a/client/client_test.go
+++ b/client/client_test.go
@@ -32,6 +32,31 @@
 	if err != nil {
 		t.Error(err)
 	}
-	uploader.Upload(f)
+	uploader.Upload(f, 1)
 
 }
+
+func TestUploadSmallFileWithReplication(t *testing.T) {
+	env, err := pt.NewInMemoryEnv(3)
+	if err != nil {
+		t.Error(err)
+	}
+	defer env.Stop()
+
+	var opts []grpc.DialOption
+	opts = append(opts, grpc.WithInsecure())
+	opts = append(opts, grpc.WithBlock())
+	conn, err := grpc.Dial("unix:///tmp/pcloud/master", opts...)
+	if err != nil {
+		t.Error(err)
+	}
+	defer conn.Close()
+	client := api.NewMetadataStorageClient(conn)
+
+	uploader := NewFileUploader(client)
+	f, err := os.Open("testdata/foo")
+	if err != nil {
+		t.Error(err)
+	}
+	uploader.Upload(f, 2)
+}
