Re-ordering initialization calls.
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)
     {