diff --git a/prefs/src/main/java/org/apache/felix/prefs/BackingStoreManager.java b/prefs/src/main/java/org/apache/felix/prefs/BackingStoreManager.java
index b445199..f5b2472 100644
--- a/prefs/src/main/java/org/apache/felix/prefs/BackingStoreManager.java
+++ b/prefs/src/main/java/org/apache/felix/prefs/BackingStoreManager.java
@@ -18,6 +18,8 @@
  */
 package org.apache.felix.prefs;
 
+import org.osgi.service.prefs.BackingStoreException;
+
 
 /**
  * Get the backing store.
@@ -27,5 +29,5 @@
     /**
      * Return the current backing store.
      */
-    BackingStore getStore();
+    BackingStore getStore() throws BackingStoreException;
 }
diff --git a/prefs/src/main/java/org/apache/felix/prefs/impl/PreferencesManager.java b/prefs/src/main/java/org/apache/felix/prefs/impl/PreferencesManager.java
index 458ce6a..555ded5 100644
--- a/prefs/src/main/java/org/apache/felix/prefs/impl/PreferencesManager.java
+++ b/prefs/src/main/java/org/apache/felix/prefs/impl/PreferencesManager.java
@@ -193,30 +193,36 @@
     /**
      * @see org.apache.felix.prefs.BackingStoreManager#getStore()
      */
-    public BackingStore getStore() {
-        if (this.storeTracker == null) {
-            // We're being stopped already...
-            return null;
+    public BackingStore getStore() throws BackingStoreException {
+        BackingStore service = null;
+        ServiceTracker storeTracker = this.storeTracker;
+
+        // Only possible if we're not stopped already...
+        if (storeTracker != null) {
+	        // has the service changed?
+	        int currentCount = storeTracker.getTrackingCount();
+	        service = (BackingStore) storeTracker.getService();
+	        if (service != null && this.storeTrackingCount < currentCount) {
+	            this.storeTrackingCount = currentCount;
+	            this.cleanupStore(service);
+	        }
+	        if (service == null) {
+	            // no service available use default store
+	            if (this.defaultStore == null) {
+	                synchronized (this) {
+	                    if (this.defaultStore == null) {
+	                        this.defaultStore = new DataFileBackingStoreImpl(this.context);
+	                        this.cleanupStore(this.defaultStore);
+	                    }
+	                }
+	            }
+	            service = this.defaultStore;
+	        }
         }
 
-        // has the service changed?
-        int currentCount = this.storeTracker.getTrackingCount();
-        BackingStore service = (BackingStore) this.storeTracker.getService();
-        if (service != null && this.storeTrackingCount < currentCount) {
-            this.storeTrackingCount = currentCount;
-            this.cleanupStore(service);
-        }
         if (service == null) {
-            // no service available use default store
-            if (this.defaultStore == null) {
-                synchronized (this) {
-                    if (this.defaultStore == null) {
-                        this.defaultStore = new DataFileBackingStoreImpl(this.context);
-                        this.cleanupStore(this.defaultStore);
-                    }
-                }
-            }
-            service = this.defaultStore;
+            // (still) no service available; cannot fulfill this request...
+            throw new BackingStoreException("No backing store!");
         }
 
         return service;
