diff --git a/src/main/java/org/apache/sling/settings/impl/SlingIdUtil.java b/src/main/java/org/apache/sling/settings/impl/SlingIdUtil.java
index 95032c2..0bcbf3b 100644
--- a/src/main/java/org/apache/sling/settings/impl/SlingIdUtil.java
+++ b/src/main/java/org/apache/sling/settings/impl/SlingIdUtil.java
@@ -31,7 +31,7 @@
     /**
      * Read the id from a file.
      */
-    static String readSlingId(final File idFile, int maxLength) {
+    static String readSlingId(final File idFile, int maxLength) throws IOException {
         if (idFile.exists() && idFile.length() >= maxLength) {
             DataInputStream dis = null;
             try {
@@ -41,13 +41,7 @@
                 final String rawString = new String(rawBytes, "ISO-8859-1");
 
                 // roundtrip to ensure correct format of UUID value
-                final String id = UUID.fromString(rawString).toString();
-                // logger.debug("Got Sling ID {} from file {}", id, idFile);
-
-                return id;
-            } catch (final Throwable t) {
-                // logger.error("Failed reading UUID from id file " + idFile
-                //        + ", creating new id", t);
+                return UUID.fromString(rawString).toString();
             } finally {
                 if (dis != null) {
                     try {
@@ -62,7 +56,7 @@
     /**
      * Write the sling id file.
      */
-    static void writeSlingId(final File idFile, final String id) {
+    static void writeSlingId(final File idFile, final String id) throws IOException {
         idFile.delete();
         idFile.getParentFile().mkdirs();
         DataOutputStream dos = null;
@@ -71,8 +65,6 @@
             dos = new DataOutputStream(new FileOutputStream(idFile));
             dos.write(rawBytes, 0, rawBytes.length);
             dos.flush();
-        } catch (final Throwable t) {
-            // logger.error("Failed writing UUID to id file " + idFile, t);
         } finally {
             if (dos != null) {
                 try {
diff --git a/src/main/java/org/apache/sling/settings/impl/SlingSettingsServiceImpl.java b/src/main/java/org/apache/sling/settings/impl/SlingSettingsServiceImpl.java
index 1899aa3..d865896 100644
--- a/src/main/java/org/apache/sling/settings/impl/SlingSettingsServiceImpl.java
+++ b/src/main/java/org/apache/sling/settings/impl/SlingSettingsServiceImpl.java
@@ -127,12 +127,23 @@
             // the osgi framework does not support storing something in the file system
             throw new RuntimeException("Unable to read from bundle data file.");
         }
-        this.slingId = SlingIdUtil.readSlingId(idFile, SLING_ID_LENGTH);
+
+        try {
+            slingId = SlingIdUtil.readSlingId(idFile, SLING_ID_LENGTH);
+            logger.info("Read Sling ID {} from file {}", slingId, idFile);
+        } catch (final Throwable t) {
+            logger.error("Failed reading Sling ID from file " + idFile, t);
+        }
 
         // no sling id yet or failure to read file: create an id and store
         if (slingId == null) {
             slingId = UUID.randomUUID().toString();
-            SlingIdUtil.writeSlingId(idFile, this.slingId);
+            logger.info("Created new Sling ID {}", slingId);
+            try {
+                SlingIdUtil.writeSlingId(idFile, slingId);
+            } catch (final Throwable t) {
+                logger.error("Failed writing Sling ID to file " + idFile, t);
+            }
         }
     }
 
