Index: solid/backends/udisks/udisksmanager.cpp
===================================================================
--- solid/backends/udisks/udisksmanager.cpp	(revision 1192125)
+++ solid/backends/udisks/udisksmanager.cpp	(working copy)
@@ -56,8 +56,6 @@
                 this, SLOT(slotDeviceRemoved(QDBusObjectPath)));
         connect(&m_manager, SIGNAL(DeviceChanged(QDBusObjectPath)),
                 this, SLOT(slotDeviceChanged(QDBusObjectPath)));
-
-        m_deviceCache = allDevices(); // prefill the cache
     }
 }
 
@@ -89,9 +87,10 @@
 {
     QStringList result;
 
+    //qDebug() << Q_FUNC_INFO << "parentUdi:" << parentUdi << "type:" << type;
     if (!parentUdi.isEmpty())
     {
-        foreach (const QString & udi, m_deviceCache)
+        Q_FOREACH (const QString & udi, deviceCache())
         {
             UDisksDevice device(udi);
             if (device.queryDeviceInterface(type) && device.parentUdi() == parentUdi)
@@ -102,7 +101,7 @@
     }
     else if (type != Solid::DeviceInterface::Unknown)
     {
-        foreach (const QString & udi, m_deviceCache)
+        Q_FOREACH (const QString & udi, deviceCache())
         {
             UDisksDevice device(udi);
             if (device.queryDeviceInterface(type))
@@ -111,20 +110,21 @@
 
         return result;
     }
-    else
-        return m_deviceCache;
+
+    return deviceCache();
 }
 
 QStringList UDisksManager::allDevices()
 {
+    //qDebug() << "*****" << Q_FUNC_INFO;
     m_knownDrivesWithMedia.clear();
+    m_deviceCache.clear();
 
-    QStringList result;
-    result << udiPrefix();
+    m_deviceCache << udiPrefix();
 
-    foreach(const QString & udi, allDevicesInternal())
+    Q_FOREACH(const QString & udi, allDevicesInternal())
     {
-        result.append(udi);
+        m_deviceCache.append(udi);
 
         UDisksDevice device(udi);
         if (device.queryDeviceInterface(Solid::DeviceInterface::OpticalDrive)) // forge a special (separate) device for optical discs
@@ -133,14 +133,12 @@
             {
                 if (!m_knownDrivesWithMedia.contains(udi))
                     m_knownDrivesWithMedia.append(udi);
-                result.append(udi + ":media");
+                m_deviceCache.append(udi + ":media");
             }
         }
     }
 
-    m_deviceCache = result; // set the cache
-
-    return result;
+    return m_deviceCache;
 }
 
 QStringList UDisksManager::allDevicesInternal()
@@ -153,7 +151,7 @@
     }
 
     QStringList retList;
-    foreach (const QDBusObjectPath &path, reply.value()) {
+    Q_FOREACH(const QDBusObjectPath &path, reply.value()) {
         retList << path.path();
     }
 
@@ -217,4 +215,13 @@
     }
 }
 
+const QStringList& Solid::Backends::UDisks::UDisksManager::deviceCache()
+{
+    if (m_deviceCache.isEmpty())
+        allDevices();
+
+    return m_deviceCache;
+}
+
+
 #include "backends/udisks/udisksmanager.moc"
Index: solid/backends/udisks/udisksmanager.h
===================================================================
--- solid/backends/udisks/udisksmanager.h	(revision 1192125)
+++ solid/backends/udisks/udisksmanager.h	(working copy)
@@ -55,6 +55,7 @@
     void slotDeviceChanged(const QDBusObjectPath &opath);
 
 private:
+    const QStringList& deviceCache();
     QStringList allDevicesInternal();
     QStringList m_knownDrivesWithMedia;  // list of known optical drives which contain a media
     QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
