diff --git a/lib/src/chromiumos/lro/manager_test.go b/lib/src/chromiumos/lro/manager_test.go
index 6164766..8be1bcc 100644
--- a/lib/src/chromiumos/lro/manager_test.go
+++ b/lib/src/chromiumos/lro/manager_test.go
@@ -26,14 +26,14 @@
 	return server.Serve(l)
 }
 
-func (s *exampleServer) ProvisionDut(ctx context.Context, req *api.ProvisionDutRequest) (*longrunning.Operation, error) {
+func (s *exampleServer) RunTests(ctx context.Context, req *api.RunTestsRequest) (*longrunning.Operation, error) {
 	op := s.Manager.NewOperation()
 	go s.provision(ctx, req, op.Name)
 	return op, nil
 }
 
-func (s *exampleServer) provision(ctx context.Context, req *api.ProvisionDutRequest, op string) {
-	s.Manager.SetResult(op, &api.ProvisionDutResponse{})
+func (s *exampleServer) provision(ctx context.Context, req *api.RunTestsRequest, op string) {
+	s.Manager.SetResult(op, &api.RunTestsResponse{})
 }
 
 func RunServer() {
diff --git a/test/src/chromiumos/dutservice/cmd/dutserver/dutserver.go b/test/src/chromiumos/dutservice/cmd/dutserver/dutserver.go
deleted file mode 100644
index d57b2a7..0000000
--- a/test/src/chromiumos/dutservice/cmd/dutserver/dutserver.go
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2021 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Implements dut_service.proto (see proto for details)
-package main
-
-import (
-	"context"
-	"log"
-	"net"
-
-	"chromiumos/lro"
-
-	"go.chromium.org/chromiumos/config/go/longrunning"
-	"go.chromium.org/chromiumos/config/go/test/api"
-	"google.golang.org/grpc"
-)
-
-// DutServer implementation of dut_service.proto
-type DutServer struct {
-	Manager *lro.Manager
-	logger  *log.Logger
-}
-
-// newDutServer creates a new dut service server to listen to rpc requests.
-func newDutServer(l net.Listener, logger *log.Logger) (*grpc.Server, error) {
-	s := &DutServer{
-		Manager: lro.New(),
-		logger:  logger,
-	}
-	defer s.Manager.Close()
-	server := grpc.NewServer()
-	api.RegisterDutServiceServer(server, s)
-	longrunning.RegisterOperationsServer(server, s.Manager)
-	logger.Println("dutservice listen to request at ", l.Addr().String())
-	return server, nil
-}
-
-// ProvisionDut installs a specified version of Chrome OS on the DUT, along
-// with any specified DLCs.
-//
-// If the DUT is already on the specified version of Chrome OS, the OS will
-// not be provisioned.
-//
-// If the DUT already has the specified list of DLCs, only the missing DLCs
-// will be provisioned.
-func (s *DutServer) ProvisionDut(ctx context.Context, req *api.ProvisionDutRequest) (*longrunning.Operation, error) {
-	s.logger.Println("Received api.ProvisionDutRequest: ", *req)
-	op := s.Manager.NewOperation()
-	s.Manager.SetResult(op.Name, &api.ProvisionDutResponse{})
-	return op, nil
-}
-
-// ProvisionLacros installs a specified version of Lacros on the DUT.
-//
-// If the DUT already has the specified version of Lacros, Lacros will not be
-// provisioned.
-func (s *DutServer) ProvisionLacros(ctx context.Context, req *api.ProvisionLacrosRequest) (*longrunning.Operation, error) {
-	s.logger.Println("Received api.ProvisionLacrosRequest: ", *req)
-	op := s.Manager.NewOperation()
-	s.Manager.SetResult(op.Name, &api.ProvisionLacrosResponse{})
-	return op, nil
-}
-
-// ProvisionAsh installs a specified version of ash-chrome on the DUT.
-//
-// This directly overwrites the version of ash-chrome on the current root
-// disk partition.
-func (s *DutServer) ProvisionAsh(ctx context.Context, req *api.ProvisionAshRequest) (*longrunning.Operation, error) {
-	s.logger.Println("Received api.ProvisionAshRequest: ", *req)
-	op := s.Manager.NewOperation()
-	s.Manager.SetResult(op.Name, &api.ProvisionAshResponse{})
-	return op, nil
-}
-
-// ProvisionArc installs a specified version of ARC on the DUT.
-//
-// This directly overwrites the version of ARC on the current root
-// disk partition.
-func (s *DutServer) ProvisionArc(ctx context.Context, req *api.ProvisionArcRequest) (*longrunning.Operation, error) {
-	s.logger.Println("Received api.ProvisionArcRequest: ", *req)
-	op := s.Manager.NewOperation()
-	s.Manager.SetResult(op.Name, &api.ProvisionArcResponse{})
-	return op, nil
-}
diff --git a/test/src/chromiumos/dutservice/OWNERS b/test/src/chromiumos/provision/OWNERS
similarity index 100%
rename from test/src/chromiumos/dutservice/OWNERS
rename to test/src/chromiumos/provision/OWNERS
diff --git a/test/src/chromiumos/dutservice/cmd/dutserver/main.go b/test/src/chromiumos/provision/cmd/provisionserver/main.go
similarity index 80%
rename from test/src/chromiumos/dutservice/cmd/dutserver/main.go
rename to test/src/chromiumos/provision/cmd/provisionserver/main.go
index 5c21bb1..e0f0ac7 100644
--- a/test/src/chromiumos/dutservice/cmd/dutserver/main.go
+++ b/test/src/chromiumos/provision/cmd/provisionserver/main.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Package main implements the dutservice used to run tests in RTD.
+// Package main implements the provisionservice used to setup CrOS devices
 package main
 
 import (
@@ -22,7 +22,7 @@
 // createLogFile creates a file and its parent directory for logging purpose.
 func createLogFile() (*os.File, error) {
 	t := time.Now()
-	fullPath := filepath.Join("/tmp/dutservice/", t.Format("20060102-150405"))
+	fullPath := filepath.Join("/tmp/provisionservice/", t.Format("20060102-150405"))
 	if err := os.MkdirAll(fullPath, 0755); err != nil {
 		return nil, fmt.Errorf("failed to create directory %v: %v", fullPath, err)
 	}
@@ -49,7 +49,7 @@
 		flag.Parse()
 
 		if *version {
-			fmt.Println("dutservice version ", Version)
+			fmt.Println("provisionservice version ", Version)
 			return 0
 		}
 
@@ -60,15 +60,15 @@
 		defer logFile.Close()
 
 		logger := newLogger(logFile)
-		logger.Println("Starting dutservice version ", Version)
+		logger.Println("Starting provisionservice version ", Version)
 		l, err := net.Listen("tcp", ":0")
 		if err != nil {
 			logger.Fatalln("Failed to create a net listener: ", err)
 			return 2
 		}
-		server, err := newDutServer(l, logger)
+		server, err := newProvisionServer(l, logger)
 		if err != nil {
-			logger.Fatalln("Failed to start dutservice server: ", err)
+			logger.Fatalln("Failed to start provisionservice server: ", err)
 		}
 
 		server.Serve(l)
diff --git a/test/src/chromiumos/provision/cmd/provisionserver/provisionserver.go b/test/src/chromiumos/provision/cmd/provisionserver/provisionserver.go
new file mode 100644
index 0000000..da9e340
--- /dev/null
+++ b/test/src/chromiumos/provision/cmd/provisionserver/provisionserver.go
@@ -0,0 +1,86 @@
+// Copyright 2021 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Implements provision_service.proto (see proto for details)
+package main
+
+import (
+	"context"
+	"log"
+	"net"
+
+	"chromiumos/lro"
+
+	"go.chromium.org/chromiumos/config/go/longrunning"
+	"go.chromium.org/chromiumos/config/go/test/api"
+	"google.golang.org/grpc"
+)
+
+// ProvisionServer implementation of provision_service.proto
+type ProvisionServer struct {
+	Manager *lro.Manager
+	logger  *log.Logger
+}
+
+// newProvisionServer creates a new provision service server to listen to rpc requests.
+func newProvisionServer(l net.Listener, logger *log.Logger) (*grpc.Server, error) {
+	s := &ProvisionServer{
+		Manager: lro.New(),
+		logger:  logger,
+	}
+	defer s.Manager.Close()
+	server := grpc.NewServer()
+	api.RegisterProvisionServiceServer(server, s)
+	longrunning.RegisterOperationsServer(server, s.Manager)
+	logger.Println("provisionservice listen to request at ", l.Addr().String())
+	return server, nil
+}
+
+// InstallCros installs a specified version of Chrome OS on the DUT, along
+// with any specified DLCs.
+//
+// If the DUT is already on the specified version of Chrome OS, the OS will
+// not be provisioned.
+//
+// If the DUT already has the specified list of DLCs, only the missing DLCs
+// will be provisioned.
+func (s *ProvisionServer) InstallCros(ctx context.Context, req *api.InstallCrosRequest) (*longrunning.Operation, error) {
+	s.logger.Println("Received api.InstallCrosRequest: ", *req)
+	op := s.Manager.NewOperation()
+	s.Manager.SetResult(op.Name, &api.InstallCrosResponse{})
+	return op, nil
+}
+
+// InstallLacros installs a specified version of Lacros on the DUT.
+//
+// If the DUT already has the specified version of Lacros, Lacros will not be
+// provisioned.
+func (s *ProvisionServer) InstallLacros(ctx context.Context, req *api.InstallLacrosRequest) (*longrunning.Operation, error) {
+	s.logger.Println("Received api.InstallLacrosRequest: ", *req)
+	op := s.Manager.NewOperation()
+	s.Manager.SetResult(op.Name, &api.InstallLacrosResponse{})
+	return op, nil
+}
+
+// InstallAsh installs a specified version of ash-chrome on the DUT.
+//
+// This directly overwrites the version of ash-chrome on the current root
+// disk partition.
+func (s *ProvisionServer) InstallAsh(ctx context.Context, req *api.InstallAshRequest) (*longrunning.Operation, error) {
+	s.logger.Println("Received api.InstallAshRequest: ", *req)
+	op := s.Manager.NewOperation()
+	s.Manager.SetResult(op.Name, &api.InstallAshResponse{})
+	return op, nil
+}
+
+// InstallArc installs a specified version of ARC on the DUT.
+//
+// This directly overwrites the version of ARC on the current root
+// disk partition.
+func (s *ProvisionServer) InstallArc(ctx context.Context, req *api.InstallArcRequest) (*longrunning.Operation, error) {
+	s.logger.Println("Received api.InstallArcRequest: ", *req)
+	op := s.Manager.NewOperation()
+	s.Manager.SetResult(op.Name, &api.InstallArcResponse{})
+	return op, nil
+}
diff --git a/test/src/chromiumos/dutservice/cmd/dutserver/dutserver_test.go b/test/src/chromiumos/provision/cmd/provisionserver/provisionserver_test.go
similarity index 60%
rename from test/src/chromiumos/dutservice/cmd/dutserver/dutserver_test.go
rename to test/src/chromiumos/provision/cmd/provisionserver/provisionserver_test.go
index 905c7bd..badc807 100644
--- a/test/src/chromiumos/dutservice/cmd/dutserver/dutserver_test.go
+++ b/test/src/chromiumos/provision/cmd/provisionserver/provisionserver_test.go
@@ -15,8 +15,8 @@
 	"google.golang.org/grpc"
 )
 
-// TestDutServer_Empty tests if DutServer can handle emtpy requst without problem.
-func TestDutServer_Empty(t *testing.T) {
+// TestProvisionServer_Empty tests if ProvisionServer can handle emtpy requst without problem.
+func TestProvisionServer_Empty(t *testing.T) {
 	var logBuf bytes.Buffer
 	l, err := net.Listen("tcp", ":0")
 	if err != nil {
@@ -24,9 +24,9 @@
 	}
 
 	ctx := context.Background()
-	srv, err := newDutServer(l, log.New(&logBuf, "", log.LstdFlags|log.LUTC))
+	srv, err := newProvisionServer(l, log.New(&logBuf, "", log.LstdFlags|log.LUTC))
 	if err != nil {
-		t.Fatalf("Failed to start DutServer: %v", err)
+		t.Fatalf("Failed to start ProvisionServer: %v", err)
 	}
 	go srv.Serve(l)
 	defer srv.Stop()
@@ -37,8 +37,8 @@
 	}
 	defer conn.Close()
 
-	cl := api.NewDutServiceClient(conn)
-	if _, err := cl.ProvisionDut(ctx, &api.ProvisionDutRequest{}); err != nil {
-		t.Fatalf("Failed at api.ProvisionDut: %v", err)
+	cl := api.NewProvisionServiceClient(conn)
+	if _, err := cl.InstallCros(ctx, &api.InstallCrosRequest{}); err != nil {
+		t.Fatalf("Failed at api.InstallCros: %v", err)
 	}
 }
