-    int idx = wxSystemOptionsModule::sm_optionNames.Index(name, false);
-    if (idx == wxNOT_FOUND)
-        return wxEmptyString;
-    else
-        return wxSystemOptionsModule::sm_optionValues[idx];
+    wxString val;
+
+    int idx = gs_optionNames.Index(name, false);
+    if ( idx != wxNOT_FOUND )
+    {
+        val = gs_optionValues[idx];
+    }
+    else // not set explicitely
+    {
+        // look in the environment: first for a variable named "wx_appname_name"
+        // which can be set to affect the behaviour or just this application
+        // and then for "wx_name" which can be set to change the option globally
+        wxString var(name);
+        var.Replace(_T("."), _T("_"));  // '.'s not allowed in env var names
+
+        wxString appname;
+        if ( wxTheApp )
+            appname = wxTheApp->GetAppName();
+
+        if ( !appname.empty() )
+            val = wxGetenv(_T("wx_") + appname + _T('_') + var);
+
+        if ( val.empty() )
+            val = wxGetenv(_T("wx_") + var);
+    }
+
+    return val;