diff --git a/api/src/main/java/io/mifos/provisioner/api/v1/client/ProvisionerService.java b/api/src/main/java/io/mifos/provisioner/api/v1/client/Provisioner.java
similarity index 99%
rename from api/src/main/java/io/mifos/provisioner/api/v1/client/ProvisionerService.java
rename to api/src/main/java/io/mifos/provisioner/api/v1/client/Provisioner.java
index 15bc6d4..48fbe09 100644
--- a/api/src/main/java/io/mifos/provisioner/api/v1/client/ProvisionerService.java
+++ b/api/src/main/java/io/mifos/provisioner/api/v1/client/Provisioner.java
@@ -37,7 +37,7 @@
  */
 @SuppressWarnings("unused")
 @FeignClient(name="provisioner-v1", path="/provisioner/v1", configuration=CustomFeignClientsConfiguration.class)
-public interface ProvisionerService {
+public interface Provisioner {
 
 
   @RequestMapping(
diff --git a/component-test/src/main/java/io/mifos/provisioner/AbstractServiceTest.java b/component-test/src/main/java/io/mifos/provisioner/AbstractServiceTest.java
index 8fb6f3e..1fc4cdd 100644
--- a/component-test/src/main/java/io/mifos/provisioner/AbstractServiceTest.java
+++ b/component-test/src/main/java/io/mifos/provisioner/AbstractServiceTest.java
@@ -16,7 +16,7 @@
 package io.mifos.provisioner;
 
 import io.mifos.core.test.env.TestEnvironment;
-import io.mifos.provisioner.api.v1.client.ProvisionerService;
+import io.mifos.provisioner.api.v1.client.Provisioner;
 import io.mifos.provisioner.config.ProvisionerServiceConfig;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
@@ -68,7 +68,7 @@
           .around(cassandraInitializer);
 
   @Autowired
-  protected ProvisionerService provisionerService;
+  protected Provisioner provisioner;
 
   public AbstractServiceTest() {
     super();
diff --git a/component-test/src/main/java/io/mifos/provisioner/application/TestApplications.java b/component-test/src/main/java/io/mifos/provisioner/application/TestApplications.java
index fd89597..4879b06 100644
--- a/component-test/src/main/java/io/mifos/provisioner/application/TestApplications.java
+++ b/component-test/src/main/java/io/mifos/provisioner/application/TestApplications.java
@@ -41,23 +41,23 @@
   @Before
   public void before()
   {
-    final AuthenticationResponse authentication = provisionerService.authenticate(
+    final AuthenticationResponse authentication = provisioner.authenticate(
             this.getClientId(), ApiConstants.SYSTEM_SU, ProvisionerConstants.INITIAL_PWD);
     autoSeshat = new AutoSeshat(authentication.getToken());
   }
 
   @After
   public void after() {
-    provisionerService.deleteApplication(Fixture.getApplication().getName());
+    provisioner.deleteApplication(Fixture.getApplication().getName());
     autoSeshat.close();
   }
 
   @Test
   public void shouldCreateApplication() {
     final Application application = Fixture.getApplication();
-    provisionerService.createApplication(application);
+    provisioner.createApplication(application);
 
-    final Application createdApplication = provisionerService.getApplication(application.getName());
+    final Application createdApplication = provisioner.getApplication(application.getName());
 
     Assert.assertNotNull(createdApplication);
     Assert.assertEquals(application.getName(), createdApplication.getName());
@@ -68,25 +68,25 @@
 
   @Test
   public void shouldFindApplication() {
-    provisionerService.createApplication(Fixture.getApplication());
-    Assert.assertNotNull(provisionerService.getApplication(Fixture.getApplication().getName()));
+    provisioner.createApplication(Fixture.getApplication());
+    Assert.assertNotNull(provisioner.getApplication(Fixture.getApplication().getName()));
   }
 
   @Test
   public void shouldFetchAll() {
-    provisionerService.createApplication(Fixture.getApplication());
-    Assert.assertFalse(provisionerService.getApplications().isEmpty());
+    provisioner.createApplication(Fixture.getApplication());
+    Assert.assertFalse(provisioner.getApplications().isEmpty());
   }
 
   @Test(expected = DuplicateIdentifierException.class)
   public void shouldFailCreateDuplicate() {
-    provisionerService.createApplication(Fixture.getApplication());
-    provisionerService.createApplication(Fixture.getApplication());
+    provisioner.createApplication(Fixture.getApplication());
+    provisioner.createApplication(Fixture.getApplication());
   }
 
   @Test(expected = NotFoundException.class)
   public void shouldFailFindUnknown() {
-    provisionerService.getApplication("unknown");
+    provisioner.getApplication("unknown");
   }
 
   @Test
@@ -94,18 +94,18 @@
     final Application applicationToDelete = new Application();
     applicationToDelete.setName("deleteme");
 
-    provisionerService.createApplication(applicationToDelete);
+    provisioner.createApplication(applicationToDelete);
 
     try {
-      provisionerService.getApplication(applicationToDelete.getName());
+      provisioner.getApplication(applicationToDelete.getName());
     } catch (final RuntimeException ignored) {
       Assert.fail();
     }
 
-    provisionerService.deleteApplication(applicationToDelete.getName());
+    provisioner.deleteApplication(applicationToDelete.getName());
 
     try {
-      provisionerService.getApplication(applicationToDelete.getName());
+      provisioner.getApplication(applicationToDelete.getName());
       Assert.fail();
     }
     catch (final RuntimeException ex) {
diff --git a/component-test/src/main/java/io/mifos/provisioner/client/TestClients.java b/component-test/src/main/java/io/mifos/provisioner/client/TestClients.java
index 73aac42..5ecff30 100644
--- a/component-test/src/main/java/io/mifos/provisioner/client/TestClients.java
+++ b/component-test/src/main/java/io/mifos/provisioner/client/TestClients.java
@@ -38,14 +38,14 @@
   @Before
   public void before()
   {
-    final AuthenticationResponse authentication = provisionerService.authenticate(
+    final AuthenticationResponse authentication = provisioner.authenticate(
         this.getClientId(), ApiConstants.SYSTEM_SU, ProvisionerConstants.INITIAL_PWD);
     autoSeshat = new AutoSeshat(authentication.getToken());
   }
 
   @After
   public void after() {
-    provisionerService.deleteClient(Fixture.getCompTestClient().getName());
+    provisioner.deleteClient(Fixture.getCompTestClient().getName());
     autoSeshat.close();
   }
 
@@ -53,10 +53,10 @@
   public void shouldCreateClient() {
     final Client client = Fixture.getCompTestClient();
 
-    provisionerService.createClient(client);
+    provisioner.createClient(client);
     //TODO: add waiting?
 
-    final Client newlyCreatedClient = provisionerService.getClient(client.getName());
+    final Client newlyCreatedClient = provisioner.getClient(client.getName());
 
     Assert.assertEquals(client.getName(), newlyCreatedClient.getName());
     Assert.assertEquals(client.getDescription(), newlyCreatedClient.getDescription());
@@ -70,24 +70,24 @@
     final Client client = new Client();
     client.setName("duplicate-client");
 
-    provisionerService.createClient(client);
-    provisionerService.createClient(client);
+    provisioner.createClient(client);
+    provisioner.createClient(client);
   }
 
   @Test
   public void shouldFindClient() {
-    provisionerService.createClient(Fixture.getCompTestClient());
-    Assert.assertNotNull(provisionerService.getClient(Fixture.getCompTestClient().getName()));
+    provisioner.createClient(Fixture.getCompTestClient());
+    Assert.assertNotNull(provisioner.getClient(Fixture.getCompTestClient().getName()));
   }
 
   @Test(expected = NotFoundException.class)
   public void shouldNotFindClientUnknown() {
-    provisionerService.getClient("unknown-client");
+    provisioner.getClient("unknown-client");
   }
 
   @Test
   public void shouldFetchAllClients() {
-    Assert.assertFalse(provisionerService.getClients().isEmpty());
+    Assert.assertFalse(provisioner.getClients().isEmpty());
   }
 
   @Test
@@ -95,18 +95,18 @@
     final Client clientToDelete = new Client();
     clientToDelete.setName("deleteme");
 
-    provisionerService.createClient(clientToDelete);
+    provisioner.createClient(clientToDelete);
 
     try {
-      provisionerService.getClient(clientToDelete.getName());
+      provisioner.getClient(clientToDelete.getName());
     } catch (final Exception ex) {
       Assert.fail();
     }
 
-    provisionerService.deleteClient(clientToDelete.getName());
+    provisioner.deleteClient(clientToDelete.getName());
 
     try {
-      provisionerService.getClient(clientToDelete.getName());
+      provisioner.getClient(clientToDelete.getName());
       Assert.fail();
     }
     catch (final RuntimeException ex) {
diff --git a/component-test/src/main/java/io/mifos/provisioner/security/TestAuthentication.java b/component-test/src/main/java/io/mifos/provisioner/security/TestAuthentication.java
index 7a17509..3996221 100644
--- a/component-test/src/main/java/io/mifos/provisioner/security/TestAuthentication.java
+++ b/component-test/src/main/java/io/mifos/provisioner/security/TestAuthentication.java
@@ -34,22 +34,22 @@
   @Test
   public void shouldLoginAdmin() {
     final AuthenticationResponse authenticate
-        = provisionerService.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, ProvisionerConstants.INITIAL_PWD);
+        = provisioner.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, ProvisionerConstants.INITIAL_PWD);
     Assert.assertNotNull(authenticate.getToken());
   }
 
   @Test(expected = InvalidProvisionerCredentialsException.class)
   public void shouldFailLoginWrongClientId() {
-    provisionerService.authenticate("wrong-client", ApiConstants.SYSTEM_SU, ProvisionerConstants.INITIAL_PWD);
+    provisioner.authenticate("wrong-client", ApiConstants.SYSTEM_SU, ProvisionerConstants.INITIAL_PWD);
   }
 
   @Test(expected = InvalidProvisionerCredentialsException.class)
   public void shouldFailLoginWrongUser() {
-    provisionerService.authenticate(this.getClientId(), "wrong-user", ProvisionerConstants.INITIAL_PWD);
+    provisioner.authenticate(this.getClientId(), "wrong-user", ProvisionerConstants.INITIAL_PWD);
   }
 
   @Test(expected = InvalidProvisionerCredentialsException.class)
   public void shouldFailLoginWrongPassword() {
-    provisionerService.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, Base64Utils.encodeToString("wrong-pwd".getBytes()));
+    provisioner.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, Base64Utils.encodeToString("wrong-pwd".getBytes()));
   }
 }
diff --git a/component-test/src/main/java/io/mifos/provisioner/security/TestPasswordPolicy.java b/component-test/src/main/java/io/mifos/provisioner/security/TestPasswordPolicy.java
index e54e572..94f2085 100644
--- a/component-test/src/main/java/io/mifos/provisioner/security/TestPasswordPolicy.java
+++ b/component-test/src/main/java/io/mifos/provisioner/security/TestPasswordPolicy.java
@@ -45,7 +45,7 @@
     currentPassword = Base64Utils.encodeToString("new-pwd".getBytes());
 
     final AuthenticationResponse authenticate =
-        provisionerService.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, currentPassword);
+        provisioner.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, currentPassword);
 
     checkAuthenticationResponse(authenticate);
   }
@@ -58,7 +58,7 @@
     setPasswordPolicy(passwordPolicy);
 
     final AuthenticationResponse authenticate =
-        provisionerService.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, currentPassword);
+        provisioner.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, currentPassword);
 
     checkAuthenticationResponse(authenticate);
   }
@@ -73,16 +73,16 @@
     currentPassword = Base64Utils.encodeToString("new-pwd".getBytes());
 
     final AuthenticationResponse authenticate =
-        provisionerService.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, currentPassword);
+        provisioner.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, currentPassword);
 
     checkAuthenticationResponse(authenticate);
   }
 
   private void setPasswordPolicy(final PasswordPolicy passwordPolicy)
   {
-    final AuthenticationResponse authenticate = provisionerService.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, currentPassword);
+    final AuthenticationResponse authenticate = provisioner.authenticate(this.getClientId(), ApiConstants.SYSTEM_SU, currentPassword);
     try (final AutoUserContext ignore = new AutoUserContext(ApiConstants.SYSTEM_SU, authenticate.getToken())) {
-      provisionerService.updatePasswordPolicy(ApiConstants.SYSTEM_SU, passwordPolicy);
+      provisioner.updatePasswordPolicy(ApiConstants.SYSTEM_SU, passwordPolicy);
     }
   }
 
diff --git a/component-test/src/main/java/io/mifos/provisioner/tenant/TestTenantApplicationAssignment.java b/component-test/src/main/java/io/mifos/provisioner/tenant/TestTenantApplicationAssignment.java
index defd82f..5d0551f 100644
--- a/component-test/src/main/java/io/mifos/provisioner/tenant/TestTenantApplicationAssignment.java
+++ b/component-test/src/main/java/io/mifos/provisioner/tenant/TestTenantApplicationAssignment.java
@@ -30,7 +30,7 @@
 import io.mifos.identity.api.v1.domain.PermittableGroup;
 import io.mifos.provisioner.ProvisionerCassandraInitializer;
 import io.mifos.provisioner.ProvisionerMariaDBInitializer;
-import io.mifos.provisioner.api.v1.client.ProvisionerService;
+import io.mifos.provisioner.api.v1.client.Provisioner;
 import io.mifos.provisioner.api.v1.domain.*;
 import io.mifos.provisioner.config.ProvisionerConstants;
 import io.mifos.provisioner.config.ProvisionerServiceConfig;
@@ -116,7 +116,7 @@
           .around(cassandraInitializer);
 
   @Autowired
-  private ProvisionerService provisionerService;
+  private Provisioner provisioner;
 
   @Autowired
   @Qualifier("tokenProviderSpy")
@@ -145,14 +145,14 @@
   @Before
   public void before()
   {
-    final AuthenticationResponse authentication = this.provisionerService.authenticate(
+    final AuthenticationResponse authentication = this.provisioner.authenticate(
             CLIENT_ID, ApiConstants.SYSTEM_SU, ProvisionerConstants.INITIAL_PWD);
     autoSeshat = new AutoSeshat(authentication.getToken());
   }
 
   @After
   public void after() throws InterruptedException {
-    this.provisionerService.deleteTenant(Fixture.getCompTestTenant().getIdentifier());
+    this.provisioner.deleteTenant(Fixture.getCompTestTenant().getIdentifier());
     Thread.sleep(500L);
     autoSeshat.close();
   }
@@ -241,7 +241,7 @@
   public void testTenantApplicationAssignment() throws InterruptedException {
     //Create io.mifos.provisioner.tenant
     final Tenant tenant = Fixture.getCompTestTenant();
-    provisionerService.createTenant(tenant);
+    provisioner.createTenant(tenant);
 
 
     //Create identity service application
@@ -251,7 +251,7 @@
     identityServiceApp.setDescription("identity manager");
     identityServiceApp.setVendor("fineract");
 
-    provisionerService.createApplication(identityServiceApp);
+    provisioner.createApplication(identityServiceApp);
 
 
     //Assign identity service application.  This requires some mocking since we can't actually call initialize in a component test.
@@ -275,7 +275,7 @@
 
     {
       final IdentityManagerInitialization identityServiceAdminInitialization
-              = provisionerService.assignIdentityManager(tenant.getIdentifier(), identityServiceAssigned);
+              = provisioner.assignIdentityManager(tenant.getIdentifier(), identityServiceAssigned);
 
       Assert.assertTrue(verifyInitializeContextAndReturnSignature.isValidSecurityContext());
       Assert.assertNotNull(identityServiceAdminInitialization);
@@ -292,7 +292,7 @@
     officeApp.setDescription("organization manager");
     officeApp.setVendor("fineract");
 
-    provisionerService.createApplication(officeApp);
+    provisioner.createApplication(officeApp);
 
 
     //Assign horus application.
@@ -318,7 +318,7 @@
     doAnswer(verifyAnubisPermittablesContext).when(anubisMock).getPermittableEndpoints();
 
     {
-      provisionerService.assignApplications(tenant.getIdentifier(), Collections.singletonList(officeAssigned));
+      provisioner.assignApplications(tenant.getIdentifier(), Collections.singletonList(officeAssigned));
       Thread.sleep(500L); //Application assigning is asynchronous.
     }
 
diff --git a/component-test/src/main/java/io/mifos/provisioner/tenant/TestTenants.java b/component-test/src/main/java/io/mifos/provisioner/tenant/TestTenants.java
index 361243b..270e5be 100644
--- a/component-test/src/main/java/io/mifos/provisioner/tenant/TestTenants.java
+++ b/component-test/src/main/java/io/mifos/provisioner/tenant/TestTenants.java
@@ -40,14 +40,14 @@
   @Before
   public void before()
   {
-    final AuthenticationResponse authentication = provisionerService.authenticate(
+    final AuthenticationResponse authentication = provisioner.authenticate(
         this.getClientId(), ApiConstants.SYSTEM_SU, ProvisionerConstants.INITIAL_PWD);
     autoSeshat = new AutoSeshat(authentication.getToken());
   }
 
   @After
   public void after() throws InterruptedException {
-    provisionerService.deleteTenant(Fixture.getCompTestTenant().getIdentifier());
+    provisioner.deleteTenant(Fixture.getCompTestTenant().getIdentifier());
     Thread.sleep(1200L);
     autoSeshat.close();
   }
@@ -55,9 +55,9 @@
   @Test
   public void shouldCreateTenant() throws Exception {
     final Tenant tenant = Fixture.getCompTestTenant();
-    provisionerService.createTenant(tenant);
+    provisioner.createTenant(tenant);
 
-    final Tenant tenantCreated = provisionerService.getTenant(tenant.getIdentifier());
+    final Tenant tenantCreated = provisioner.getTenant(tenant.getIdentifier());
 
     Assert.assertNotNull(tenantCreated);
     Assert.assertEquals(tenant.getIdentifier(), tenantCreated.getIdentifier());
@@ -69,26 +69,26 @@
 
   @Test(expected = DuplicateIdentifierException.class)
   public void shouldFailCreateDuplicate() {
-    provisionerService.createTenant(Fixture.getCompTestTenant());
-    provisionerService.createTenant(Fixture.getCompTestTenant());
+    provisioner.createTenant(Fixture.getCompTestTenant());
+    provisioner.createTenant(Fixture.getCompTestTenant());
   }
 
   @Test
   public void shouldFindTenant() {
     final Tenant tenant = Fixture.getCompTestTenant();
-    provisionerService.createTenant(tenant);
-    final Tenant foundTenant = provisionerService.getTenant(tenant.getIdentifier());
+    provisioner.createTenant(tenant);
+    final Tenant foundTenant = provisioner.getTenant(tenant.getIdentifier());
     Assert.assertNotNull(foundTenant);
   }
 
   @Test(expected = NotFoundException.class)
   public void shouldFailFindUnknown() {
-    provisionerService.getTenant("unknown");
+    provisioner.getTenant("unknown");
   }
 
   @Test
   public void shouldFetchAll() {
-    provisionerService.createTenant(Fixture.getCompTestTenant());
-    Assert.assertFalse(provisionerService.getTenants().isEmpty());
+    provisioner.createTenant(Fixture.getCompTestTenant());
+    Assert.assertFalse(provisioner.getTenants().isEmpty());
   }
 }
diff --git a/service/src/main/java/io/mifos/provisioner/internal/repository/Provisioner.java b/service/src/main/java/io/mifos/provisioner/internal/repository/ProvisionerInitializer.java
similarity index 95%
rename from service/src/main/java/io/mifos/provisioner/internal/repository/Provisioner.java
rename to service/src/main/java/io/mifos/provisioner/internal/repository/ProvisionerInitializer.java
index 311637a..5291440 100644
--- a/service/src/main/java/io/mifos/provisioner/internal/repository/Provisioner.java
+++ b/service/src/main/java/io/mifos/provisioner/internal/repository/ProvisionerInitializer.java
@@ -45,9 +45,9 @@
 import java.util.Date;
 import java.util.UUID;
 
-@SuppressWarnings({"SqlNoDataSourceInspection", "SqlDialectInspection"})
+@SuppressWarnings({"SqlNoDataSourceInspection", "SqlDialectInspection", "unused"})
 @Component
-public class Provisioner {
+public class ProvisionerInitializer {
 
   private final Environment environment;
   private final Logger logger;
@@ -59,10 +59,10 @@
   private String mariaDBName;
 
   @Autowired
-  public Provisioner(final Environment environment, @Qualifier(ProvisionerConstants.LOGGER_NAME) final Logger logger,
-                     final CassandraSessionProvider cassandraSessionProvider,
-                     final SaltGenerator saltGenerator, final HashGenerator hashGenerator,
-                     @Value("${system.initialclientid}") final String initialClientId) {
+  public ProvisionerInitializer(final Environment environment, @Qualifier(ProvisionerConstants.LOGGER_NAME) final Logger logger,
+                                final CassandraSessionProvider cassandraSessionProvider,
+                                final SaltGenerator saltGenerator, final HashGenerator hashGenerator,
+                                @Value("${system.initialclientid}") final String initialClientId) {
     super();
     this.environment = environment;
     this.logger = logger;
diff --git a/service/src/main/java/io/mifos/provisioner/rest/controller/SeshatRestController.java b/service/src/main/java/io/mifos/provisioner/rest/controller/ProvisionerRestController.java
similarity index 95%
rename from service/src/main/java/io/mifos/provisioner/rest/controller/SeshatRestController.java
rename to service/src/main/java/io/mifos/provisioner/rest/controller/ProvisionerRestController.java
index 8646152..6bcdec0 100644
--- a/service/src/main/java/io/mifos/provisioner/rest/controller/SeshatRestController.java
+++ b/service/src/main/java/io/mifos/provisioner/rest/controller/ProvisionerRestController.java
@@ -50,7 +50,7 @@
 @SuppressWarnings("unused")
 @RestController
 @RequestMapping("/")
-public class SeshatRestController {
+public class ProvisionerRestController {
 
   private final Logger logger;
   private final AuthenticationService authenticationService;
@@ -60,12 +60,12 @@
   private final TenantApplicationService tenantApplicationService;
 
   @Autowired
-  public SeshatRestController(@Qualifier(ProvisionerConstants.LOGGER_NAME) final Logger logger,
-                              final AuthenticationService authenticationService,
-                              final ClientService clientService,
-                              final TenantService tenantService,
-                              final ApplicationService applicationService,
-                              final TenantApplicationService tenantApplicationService) {
+  public ProvisionerRestController(@Qualifier(ProvisionerConstants.LOGGER_NAME) final Logger logger,
+                                   final AuthenticationService authenticationService,
+                                   final ClientService clientService,
+                                   final TenantService tenantService,
+                                   final ApplicationService applicationService,
+                                   final TenantApplicationService tenantApplicationService) {
     super();
     this.logger = logger;
     this.authenticationService = authenticationService;
