diff --git a/service/src/main/java/io/mifos/provisioner/internal/service/TenantApplicationService.java b/service/src/main/java/io/mifos/provisioner/internal/service/TenantApplicationService.java
index cc073b4..2e45d9c 100644
--- a/service/src/main/java/io/mifos/provisioner/internal/service/TenantApplicationService.java
+++ b/service/src/main/java/io/mifos/provisioner/internal/service/TenantApplicationService.java
@@ -126,12 +126,7 @@
 
 
     applicationNameToUriPairs.forEach(x -> {
-      final ApplicationSignatureSet applicationSignatureSet = anubisInitializer.initializeAnubis(
-              tenantIdentifier,
-              x.name,
-              x.uri,
-              identityManagerSignatureSet.getTimestamp(),
-              identityManagerSignatureSet.getIdentityManagerSignature());
+      final ApplicationSignatureSet applicationSignatureSet = anubisInitializer.createSignatureSet(tenantIdentifier, x.name, x.uri, identityManagerSignatureSet.getTimestamp(), identityManagerSignatureSet.getIdentityManagerSignature());
 
       identityServiceInitializer.postApplicationDetails(
               tenantIdentifier,
@@ -140,6 +135,11 @@
               x.name,
               x.uri,
               applicationSignatureSet);
+
+      //InitializeResources on the service being added should occur last, for two reasons:
+      // 1.) When the initialization event is put on the queue for this app/tenant combo, the app is fully ready for business.
+      // 2.) If the app depeneds on the provisioning of identitypermissions in its initialization, those resources will be there.
+      anubisInitializer.initializeResources(tenantIdentifier, x.name, x.uri);
     });
   }
 
diff --git a/service/src/main/java/io/mifos/provisioner/internal/service/applications/AnubisInitializer.java b/service/src/main/java/io/mifos/provisioner/internal/service/applications/AnubisInitializer.java
index 657923d..cde9c5d 100644
--- a/service/src/main/java/io/mifos/provisioner/internal/service/applications/AnubisInitializer.java
+++ b/service/src/main/java/io/mifos/provisioner/internal/service/applications/AnubisInitializer.java
@@ -42,18 +42,27 @@
     this.logger = logger;
   }
 
-  public ApplicationSignatureSet initializeAnubis(final @Nonnull String tenantIdentifier,
-                                                  final @Nonnull String applicationName,
-                                                  final @Nonnull String uri,
-                                                  final @Nonnull String keyTimestamp,
-                                                  final @Nonnull Signature signature) {
+  public void initializeResources(@Nonnull String tenantIdentifier, @Nonnull String applicationName, @Nonnull String uri) {
+    try (final AutoCloseable ignored
+                  = this.applicationCallContextProvider.getApplicationCallContext(tenantIdentifier, applicationName))
+    {
+      final Anubis anubis = this.applicationCallContextProvider.getApplication(Anubis.class, uri);
+      anubis.initializeResources();
+      logger.info("Anubis initializeResources for tenant '{}' and application '{}' succeeded.",
+              tenantIdentifier, applicationName);
+
+    } catch (final Exception e) {
+      throw new IllegalStateException(e);
+    }
+  }
+
+  public ApplicationSignatureSet createSignatureSet(@Nonnull String tenantIdentifier, @Nonnull String applicationName, @Nonnull String uri, @Nonnull String keyTimestamp, @Nonnull Signature signature) {
     try (final AutoCloseable ignored
                  = this.applicationCallContextProvider.getApplicationCallContext(tenantIdentifier, applicationName))
     {
       final Anubis anubis = this.applicationCallContextProvider.getApplication(Anubis.class, uri);
-      anubis.initializeResources();
       final ApplicationSignatureSet applicationSignatureSet = anubis.createSignatureSet(keyTimestamp, signature);
-      logger.info("Anubis initialization for io.mifos.provisioner.tenant '{}' and application '{}' succeeded with signature set '{}'.",
+      logger.info("Anubis createSignatureSet for tenant '{}' and application '{}' succeeded with signature set '{}'.",
               tenantIdentifier, applicationName, applicationSignatureSet);
       return applicationSignatureSet;
 
diff --git a/service/src/main/java/io/mifos/provisioner/internal/service/applications/IdentityServiceInitializer.java b/service/src/main/java/io/mifos/provisioner/internal/service/applications/IdentityServiceInitializer.java
index bca9b4e..8c62879 100644
--- a/service/src/main/java/io/mifos/provisioner/internal/service/applications/IdentityServiceInitializer.java
+++ b/service/src/main/java/io/mifos/provisioner/internal/service/applications/IdentityServiceInitializer.java
@@ -170,6 +170,7 @@
     final List<ApplicationPermission> applicationPermissionRequirements;
     try (final AutoCloseable ignored = applicationCallContextProvider.getApplicationCallGuestContext(tenantIdentifier)) {
       applicationPermissionRequirements = getApplicationPermissionRequirements(applicationName, applicationUri);
+      logger.info("Application permission requirements for {} contain {}.", applicationName, applicationPermissionRequirements);
 
     } catch (final Exception e) {
       throw new IllegalStateException(e);
@@ -286,6 +287,8 @@
           final @Nonnull ApplicationPermission applicationPermission) {
     try {
       identityService.createApplicationPermission(applicationName, applicationPermission.getPermission());
+      logger.info("Application permission '{}.{}' created.",
+              applicationName, applicationPermission.getPermission().getPermittableEndpointGroupIdentifier());
     }
     catch (final ApplicationPermissionAlreadyExistsException alreadyExistsException)
     {
