--- a/src/main.cxx
+++ b/src/main.cxx
@@ -101,7 +101,7 @@
 //   (this is not used in normal situations, just edit the config
 //   instead!)
 // - -m 2, MSOnly Media Server only, this is for the process forked/execed
-//   by a main Renderer process.
+//   by a main Renderer process, or a standalone Media Server.
 // - -m 3, Combined: for the main process: implement the Media Server
 //   as an embedded device. This works just fine with, for example,
 //   upplay, but confuses most of the other Control Points.
@@ -416,6 +416,13 @@
         }
     }
 
+    if (msmode == MSOnly && !enableMediaServer) {
+        cerr << "Pure Media Server mode requested, but this is "
+            "disabled by the configuration or by absent Media Server "
+            "modules.\n";
+        return 1;
+    }
+
     if (Logger::getTheLog(logfilename) == 0) {
         cerr << "Can't initialize log" << endl;
         return 1;
@@ -455,7 +462,7 @@
     }
 
     string& mcfn = opts.cachefn;
-    // no cache access needed or desirable for a pure media renderer
+    // no cache access needed or desirable for a pure media server
     if (!msonly && ohmetapersist) {
         opts.cachefn = path_cat(cachedir, "/metacache");
         if (!path_makepath(cachedir, 0755)) {
@@ -555,28 +562,31 @@
 
     // Initialize MPD client object. Retry until it works or power fail.
     MPDCli *mpdclip = 0;
-    int mpdretrysecs = 2;
-    for (;;) {
-        mpdclip = new MPDCli(mpdhost, mpdport, mpdpassword);
-        if (mpdclip == 0) {
-            LOGFAT("Can't allocate MPD client object" << endl);
-            return 1;
-        }
-        if (!mpdclip->ok()) {
-            LOGERR("MPD connection failed" << endl);
-            delete mpdclip;
-            mpdclip = 0;
-            sleep(mpdretrysecs);
-            mpdretrysecs = MIN(2*mpdretrysecs, 120);
-        } else {
-            break;
-        }
-    }
-
-    const MpdStatus& mpdstat = mpdclip->getStatus();
-    // Only the "special" upmpdcli 0.19.16 version has patch != 0
-    bool enableL16 = mpdstat.versmajor >= 1 || mpdstat.versminor >= 20 ||
-        mpdstat.verspatch >= 16; 
+    bool enableL16 = false;
+    if (!msonly) {
+        int mpdretrysecs = 2;
+        for (;;) {
+            mpdclip = new MPDCli(mpdhost, mpdport, mpdpassword);
+            if (mpdclip == 0) {
+                LOGFAT("Can't allocate MPD client object" << endl);
+                return 1;
+            }
+            if (!mpdclip->ok()) {
+                LOGERR("MPD connection failed" << endl);
+                delete mpdclip;
+                mpdclip = 0;
+                sleep(mpdretrysecs);
+                mpdretrysecs = MIN(2*mpdretrysecs, 120);
+            } else {
+                break;
+            }
+        }
+        const MpdStatus& mpdstat = mpdclip->getStatus();
+        // Only the "special" upmpdcli 0.19.16 version has patch != 0
+        enableL16 = mpdstat.versmajor >= 1 || mpdstat.versminor >= 20 ||
+            mpdstat.verspatch >= 16; 
+    }
+    
         
     // Initialize libupnpp, and check health
     LibUPnP *mylib = 0;