--- a/src/mediaserver/contentdirectory.hxx
+++ b/src/mediaserver/contentdirectory.hxx
@@ -28,12 +28,49 @@
 
 using namespace UPnPP;
 
+// Content Directory service
+//
+// The actual work is done by separate plugins (CDPlugin interface),
+// depending of where the data comes from (streaming service, e.g,
+// Tidal, Qobuz, or local file store - uprcl). There is currently a
+// single implementation of CDPlugin (PlgWithSlave) for which most of
+// the differentiated work is done by a Python subprocess specific to
+// the backend.
+//
+// The CDPluginServices interface provides some service callbacks to
+// the implementations.
+//
+// The class is responsible for generating the root directory,
+// according to what services are enabled. For deeper directories, the
+// dispatch to the right service is performed according to the first
+// element in the object ID (e.g. $qobuz$).
+//
+// Accordingly, the media access also depends on the type of backend,
+// and some media URIs are also formed in order to be dispatchable
+// (e.g. http://xxx/qobuz/...). Some also point directly to a server
+// implemented by the plugin. Depending on the service, either
+// redirection or proxying is used to supply the data stream.
+//
+// We also have a special operation mode where the browsing is done by
+// the CP and we are only used for accessing the streams (see
+// constructor comment).
 class ContentDirectory : public UPnPProvider::UpnpService,
                          public CDPluginServices {
 public:
-    // Enabled==false : used for ohcredentials, no services locally
-    // enabled, force some initializations
+
+    // Constructor.
+    // 
+    // Enabled==false: means that no content directory service is
+    // actually needed. No service will be enabled, but we perform
+    // some initializations. This is used in conjunction with
+    // OHCredentials. The Control Point (typ. Kazoo) does the
+    // browsing, and sends tidal://xx or qobuz://xx URIs to
+    // OHPlaylist. The URI contain the service trackid, and are
+    // translated by OHPlaylist/OHCredentials into the form which is
+    // generated when this class does the browsing. The data access is
+    // then performed as if the URIs had been generated by us.
     ContentDirectory(MediaServer *dev, bool enabled);
+
     ~ContentDirectory();
 
     /// Return plugin based on path prefix
@@ -44,11 +81,6 @@
     /// these as host/port
     virtual std::string getupnpaddr(CDPlugin *);
     virtual int getupnpport(CDPlugin *);
-
-    /// Add a virtual directory and set file operation interface. path
-    /// must be equal or begin with the pathprefix.
-    virtual bool setfileops(CDPlugin *, const std::string& path,
-                            UPnPProvider::VirtualDir::FileOps ops);
 
     virtual std::string getfname();