diff --git a/src/main/java/org/apache/sling/jcr/packageinit/impl/ExecutionPlanRepoInitializer.java b/src/main/java/org/apache/sling/jcr/packageinit/impl/ExecutionPlanRepoInitializer.java
index 4d88d8a..828763c 100644
--- a/src/main/java/org/apache/sling/jcr/packageinit/impl/ExecutionPlanRepoInitializer.java
+++ b/src/main/java/org/apache/sling/jcr/packageinit/impl/ExecutionPlanRepoInitializer.java
@@ -43,6 +43,7 @@
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
@@ -61,7 +62,7 @@
     private File statusFile;
 
     @ObjectClassDefinition(
-            name = "Executionplan based Repository Initializer"
+            name = "Execution plan based Repository Initializer"
     )
     @interface Config {
         
@@ -151,21 +152,19 @@
                 st.open();
                 logger.info("Waiting for PackageRegistry.");
                 PackageRegistry registry = (PackageRegistry) st.waitForService(0);
-                logger.info("PackageRegistry found - starting execution of executionplan");
+                logger.info("PackageRegistry found - starting execution of execution plan");
                 
+                ExecutionPlanBuilder builder = registry.createExecutionPlan();
                 @SuppressWarnings("deprecation")
                 Session session = slingRepository.loginAdministrative(null);
-                ExecutionPlanBuilder builder = registry.createExecutionPlan();
-                BufferedWriter writer = null;
-                try {
-                    writer = new BufferedWriter(new FileWriter(statusFile));
+                try (BufferedWriter writer = new BufferedWriter(new FileWriter(statusFile))) {
                     for (String plan : executionPlans) {
-                        builder.load(new ByteArrayInputStream(plan.getBytes("UTF-8")));
+                        builder.load(new ByteArrayInputStream(plan.getBytes(StandardCharsets.UTF_8)));
                         builder.with(session);
                         ExecutionPlan xplan = builder.execute();
                         if (xplan.getTasks().size() > 0) {
                             if (xplan.hasErrors()) {
-                                IllegalStateException ex = new IllegalStateException("Excecutionplan execution contained errors - cannot complete repository initialization.");
+                                IllegalStateException ex = new IllegalStateException("Execution plan contained errors - cannot complete repository initialization.");
                                 for (PackageTask task : xplan.getTasks()) {
                                     if (PackageTask.State.ERROR.equals(task.getState())){
                                         ex.addSuppressed(task.getError());
@@ -173,9 +172,9 @@
                                 }
                                 throw ex;
                             }
-                            logger.info("executionplan executed with {} entries", xplan.getTasks().size());
+                            logger.info("Execution plan executed with {} entries", xplan.getTasks().size());
                         } else {
-                            logger.info("No tasks found in executionplan - no additional packages installed.");
+                            logger.info("No tasks found in execution plan - no additional packages installed.");
                         }
                         
                         // save hashes to file for crosscheck on subsequent startup to avoid double processing
@@ -184,15 +183,13 @@
 
                     }
                 } finally {
-                    if (writer != null) {
-                        writer.close();
-                    }
+                    session.logout();
                 }
             } finally {
                 st.close();
             }
         } else {
-            logger.info("No executionplans configured skipping init.");
+            logger.info("No execution plans configured - skipping init.");
         }
     }
 }
diff --git a/src/test/java/org/apache/sling/jcr/packageinit/ExecutionPlanRepoInitializerTest.java b/src/test/java/org/apache/sling/jcr/packageinit/ExecutionPlanRepoInitializerTest.java
index 123a3cd..3627f52 100644
--- a/src/test/java/org/apache/sling/jcr/packageinit/ExecutionPlanRepoInitializerTest.java
+++ b/src/test/java/org/apache/sling/jcr/packageinit/ExecutionPlanRepoInitializerTest.java
@@ -39,6 +39,10 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
+import javax.jcr.LoginException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.packaging.PackageException;
 import org.apache.jackrabbit.vault.packaging.PackageId;
@@ -97,6 +101,9 @@
     @Mock
     SlingRepository slingRepo;
 
+    @Mock
+    Session adminSession;
+
     @Spy
     PackageRegistry registry = new FSPackageRegistry();
 
@@ -117,7 +124,7 @@
     
 
     @Before
-    public void setup() throws IOException, PackageException {
+    public void setup() throws IOException, PackageException, LoginException, RepositoryException {
         when(registry.createExecutionPlan()).thenReturn(builder);
         when(builder.execute()).thenReturn(xplan);
         this.statusFile = temporaryFolder.newFile(STATUSFILE_NAME + UUID.randomUUID());
@@ -126,6 +133,7 @@
         listAppender.start();
         logger.addAppender(listAppender);
         foundExceptions = new ArrayList<Exception>();
+        when(slingRepo.loginAdministrative(null)).thenReturn(adminSession);
     }
 
     @After
@@ -141,7 +149,7 @@
         initializer.processRepository(slingRepo);
         List<ILoggingEvent> logsList = listAppender.list;
         assertThat(logsList.get(0).getFormattedMessage(),
-                is("No executionplans configured skipping init."));
+                is("No execution plans configured - skipping init."));
     }
 
 
@@ -224,7 +232,7 @@
         List<ILoggingEvent> logsList = listAppender.list;
         assertEquals("Waiting for PackageRegistry.", logsList.get(0)
                                       .getMessage());
-        assertEquals("PackageRegistry found - starting execution of executionplan", logsList.get(1)
+        assertEquals("PackageRegistry found - starting execution of execution plan", logsList.get(1)
             .getMessage());
     }
 
