--- a/src/upmpd.cxx
+++ b/src/upmpd.cxx
@@ -100,12 +100,10 @@
 // device at the end of the constructor code.
 UpMpd::UpMpd(const string& deviceid, const string& friendlyname,
              const unordered_map<string, VDirContent>& files,
-             MPDCli *mpdcli, unsigned int opts, const string& cachefn,
-             int schttpport
-    )
+             MPDCli *mpdcli, Options opts)
     : UpnpDevice(deviceid, files), m_mpdcli(mpdcli), m_mpds(0),
-      m_options(opts),
-      m_mcachefn(cachefn)
+      m_options(opts.options),
+      m_mcachefn(opts.cachefn)
 {
     // Note: the order is significant here as it will be used when
     // calling the getStatus() methods, and we want AVTransport to
@@ -120,12 +118,12 @@
         m_services.push_back(new OHInfo(this));
         m_services.push_back(new OHTime(this));
         m_services.push_back(new OHVolume(this, rdctl));
-        OHPlaylist *ohp = new OHPlaylist(this, rdctl);
+        OHPlaylist *ohp = new OHPlaylist(this, rdctl, opts.ohmetasleep);
         m_services.push_back(ohp);
         if (avt)
             avt->setOHP(ohp);
         if (has_scmpdcli) {
-            m_services.push_back(new OHReceiver(this, ohp, schttpport));
+            m_services.push_back(new OHReceiver(this, ohp, opts.schttpport));
         }
     }
 }
@@ -339,7 +337,8 @@
     if (argc != 0)
         Usage();
 
-    int schttpport(8888);
+    UpMpd::Options opts;
+
     string iconpath;
     if (!configfile.empty()) {
         ConfSimple config(configfile.c_str(), 1, true);
@@ -380,7 +379,9 @@
             upport = atoi(value.c_str());
         }
         if (config.get("schttpport", value))
-            schttpport = atoi(value.c_str());
+            opts.schttpport = atoi(value.c_str());
+        if (config.get("ohmetasleep", value))
+            opts.ohmetasleep = atoi(value.c_str());
     }
 
     if (Logger::getTheLog(logfilename) == 0) {
@@ -419,9 +420,9 @@
         cachedir = path_cat(path_tildexpand("~") , "/.cache/upmpdcli");
     }
 
-    string mcfn;
+    string& mcfn = opts.cachefn;
     if (ohmetapersist) {
-        mcfn = path_cat(cachedir, "/metacache");
+        opts.cachefn = path_cat(cachedir, "/metacache");
         if (!path_makepath(cachedir, 0755)) {
             LOGERR("makepath("<< cachedir << ") : errno : " << errno << endl);
         } else {
@@ -585,17 +586,16 @@
                      ("icon.png", VDirContent(icondata, "image/png")));
     }
 
-    unsigned int options = UpMpd::upmpdNone;
     if (ownqueue)
-        options |= UpMpd::upmpdOwnQueue;
+        opts.options |= UpMpd::upmpdOwnQueue;
     if (openhome)
-        options |= UpMpd::upmpdDoOH;
+        opts.options |= UpMpd::upmpdDoOH;
     if (ohmetapersist)
-        options |= UpMpd::upmpdOhMetaPersist;
+        opts.options |= UpMpd::upmpdOhMetaPersist;
 
     // Initialize the UPnP device object.
     UpMpd device(string("uuid:") + UUID, friendlyname, 
-                 files, mpdclip, options, mcfn, schttpport);
+                 files, mpdclip, opts);
     dev = &device;
 
     // And forever generate state change events.