diff --git a/api_test.go b/api_test.go
index c6acd5e..f204de4 100644
--- a/api_test.go
+++ b/api_test.go
@@ -295,7 +295,7 @@
 			Expect(resp.StatusCode).Should(Equal(http.StatusOK))
 
 			var deployStatus string
-			err = db.QueryRow("SELECT deploy_status FROM deployments WHERE id=?", deploymentID).
+			err = db.QueryRow("SELECT deploy_status FROM kms_deployments WHERE id=?", deploymentID).
 				Scan(&deployStatus)
 			Expect(deployStatus).Should(Equal(RESPONSE_STATUS_SUCCESS))
 		})
@@ -332,7 +332,7 @@
 			var deploy_error_code int
 			err = db.QueryRow(`
 			SELECT deploy_status, deploy_error_code, deploy_error_message
-			FROM deployments
+			FROM kms_deployments
 			WHERE id=?`, deploymentID).Scan(&deployStatus, &deploy_error_code, &deploy_error_message)
 			Expect(deployStatus).Should(Equal(RESPONSE_STATUS_FAIL))
 			Expect(deploy_error_code).Should(Equal(100))
diff --git a/apidGatewayDeploy_suite_test.go b/apidGatewayDeploy_suite_test.go
index 3b55d05..22aa5c0 100644
--- a/apidGatewayDeploy_suite_test.go
+++ b/apidGatewayDeploy_suite_test.go
@@ -114,7 +114,7 @@
 	apiServerBaseURI, err = url.Parse(testServer.URL)
 	Expect(err).NotTo(HaveOccurred())
 
-	_, err = getDB().Exec("DELETE FROM deployments")
+	_, err = getDB().Exec("DELETE FROM kms_deployments")
 	Expect(err).ShouldNot(HaveOccurred())
 	_, err = getDB().Exec("UPDATE etag SET value=1")
 })
diff --git a/data.go b/data.go
index ad67728..0bf5462 100644
--- a/data.go
+++ b/data.go
@@ -40,7 +40,7 @@
 
 func InitDB(db apid.DB) error {
 	_, err := db.Exec(`
-	CREATE TABLE IF NOT EXISTS deployments (
+	CREATE TABLE IF NOT EXISTS kms_deployments (
 		id character varying(36) NOT NULL,
 		bundle_config_id varchar(36) NOT NULL,
 		apid_cluster_id varchar(36) NOT NULL,
@@ -91,10 +91,10 @@
 
 func insertDeployments(tx *sql.Tx, deps []DataDeployment) error {
 
-	log.Debugf("inserting %d deployments", len(deps))
+	log.Debugf("inserting %d kms_deployments", len(deps))
 
 	stmt, err := tx.Prepare(`
-	INSERT INTO deployments
+	INSERT INTO kms_deployments
 		(id, bundle_config_id, apid_cluster_id, data_scope_id,
 		bundle_config_json, config_json, created, created_by,
 		updated, updated_by, bundle_name, bundle_uri, local_bundle_uri,
@@ -103,7 +103,7 @@
 		VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18);
 	`)
 	if err != nil {
-		log.Errorf("prepare insert into deployments failed: %v", err)
+		log.Errorf("prepare insert into kms_deployments failed: %v", err)
 		return err
 	}
 	defer stmt.Close()
@@ -118,12 +118,12 @@
 			dep.LocalBundleURI, dep.BundleChecksum, dep.BundleChecksumType, dep.DeployStatus,
 			dep.DeployErrorCode, dep.DeployErrorMessage)
 		if err != nil {
-			log.Errorf("insert into deployments %s failed: %v", dep.ID, err)
+			log.Errorf("insert into kms_deployments %s failed: %v", dep.ID, err)
 			return err
 		}
 	}
 
-	log.Debug("inserting deployments succeeded")
+	log.Debug("inserting kms_deployments succeeded")
 	return err
 }
 
@@ -131,16 +131,16 @@
 
 	log.Debugf("deleteDeployment: %s", depID)
 
-	stmt, err := tx.Prepare("DELETE FROM deployments where id = $1;")
+	stmt, err := tx.Prepare("DELETE FROM kms_deployments where id = $1;")
 	if err != nil {
-		log.Errorf("prepare delete from deployments %s failed: %v", depID, err)
+		log.Errorf("prepare delete from kms_deployments %s failed: %v", depID, err)
 		return err
 	}
 	defer stmt.Close()
 
 	_, err = stmt.Exec(depID)
 	if err != nil {
-		log.Errorf("delete from deployments %s failed: %v", depID, err)
+		log.Errorf("delete from kms_deployments %s failed: %v", depID, err)
 		return err
 	}
 
@@ -169,7 +169,7 @@
 		updated, updated_by, bundle_name, bundle_uri,
 		local_bundle_uri, bundle_checksum, bundle_checksum_type, deploy_status,
 		deploy_error_code, deploy_error_message
-	FROM deployments
+	FROM kms_deployments
 	` + where)
 	if err != nil {
 		return
@@ -181,7 +181,7 @@
 		if err == sql.ErrNoRows {
 			return
 		}
-		log.Errorf("Error querying deployments: %v", err)
+		log.Errorf("Error querying kms_deployments: %v", err)
 		return
 	}
 	defer rows.Close()
@@ -220,7 +220,7 @@
 	defer tx.Rollback()
 
 	stmt, err := tx.Prepare(`
-	UPDATE deployments
+	UPDATE kms_deployments
 	SET deploy_status=$1, deploy_error_code=$2, deploy_error_message=$3
 	WHERE id=$4;
 	`)
@@ -233,7 +233,7 @@
 	for _, result := range results {
 		res, err := stmt.Exec(result.Status, result.ErrorCode, result.Message, result.ID)
 		if err != nil {
-			log.Errorf("update deployments %s to %s failed: %v", result.ID, result.Status, err)
+			log.Errorf("update kms_deployments %s to %s failed: %v", result.ID, result.Status, err)
 			return err
 		}
 		n, err := res.RowsAffected()
@@ -251,7 +251,7 @@
 
 func updateLocalBundleURI(depID, localBundleUri string) error {
 
-	stmt, err := getDB().Prepare("UPDATE deployments SET local_bundle_uri=$1 WHERE id=$2;")
+	stmt, err := getDB().Prepare("UPDATE kms_deployments SET local_bundle_uri=$1 WHERE id=$2;")
 	if err != nil {
 		log.Errorf("prepare updateLocalBundleURI failed: %v", err)
 		return err
@@ -260,11 +260,11 @@
 
 	_, err = stmt.Exec(localBundleUri, depID)
 	if err != nil {
-		log.Errorf("update deployments %s localBundleUri to %s failed: %v", depID, localBundleUri, err)
+		log.Errorf("update kms_deployments %s localBundleUri to %s failed: %v", depID, localBundleUri, err)
 		return err
 	}
 
-	log.Debugf("update deployments %s localBundleUri to %s succeeded", depID, localBundleUri)
+	log.Debugf("update kms_deployments %s localBundleUri to %s succeeded", depID, localBundleUri)
 
 	return nil
 }
