diff --git a/gui/webdisplay/inc/ROOT/RWebDisplayArgs.hxx b/gui/webdisplay/inc/ROOT/RWebDisplayArgs.hxx
index dbf1ac546a1b2281d49fe968e46abc9c0d8632dd..111b91a8225b9c4410c9308cf02844b6b0ca34f5 100644
--- a/gui/webdisplay/inc/ROOT/RWebDisplayArgs.hxx
+++ b/gui/webdisplay/inc/ROOT/RWebDisplayArgs.hxx
@@ -113,14 +113,9 @@ public:
    int GetHeight() const { return fHeight; }
 
    /// set custom executable to start web browser
-   void SetCustomExec(const std::string &exec)
-   {
-      SetBrowserKind(kCustom);
-      fExec = exec;
-   }
-
+   void SetCustomExec(const std::string &exec);
    /// returns custom executable to start web browser
-   std::string GetCustomExec() const { return GetBrowserKind() == kCustom ? fExec : ""; }
+   std::string GetCustomExec() const;
 
    /// set http server instance, used for window display
    void SetHttpServer(THttpServer *serv) { fServer = serv; }
diff --git a/gui/webdisplay/src/RWebDisplayArgs.cxx b/gui/webdisplay/src/RWebDisplayArgs.cxx
index 3e354eb9c9f2b2234896d0ae3c2e7bb903138eae..318947c9915d41d6c2379088e4f0e78e750857d9 100644
--- a/gui/webdisplay/src/RWebDisplayArgs.cxx
+++ b/gui/webdisplay/src/RWebDisplayArgs.cxx
@@ -144,3 +144,22 @@ std::string ROOT::Experimental::RWebDisplayArgs::GetFullUrl() const
 
    return url;
 }
+
+///////////////////////////////////////////////////////////////////////////////////////////
+/// Configure custom web browser
+/// Either just name of browser which can be used like "opera"
+/// or full execution string which must includes $url like "/usr/bin/opera $url"
+
+void ROOT::Experimental::RWebDisplayArgs::SetCustomExec(const std::string &exec)
+{
+   SetBrowserKind(kCustom);
+   fExec = exec;
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////
+/// returns custom executable to start web browser
+
+std::string ROOT::Experimental::RWebDisplayArgs::GetCustomExec() const
+{
+   return GetBrowserKind() == kCustom ? fExec : "";
+}
diff --git a/gui/webdisplay/src/RWebDisplayHandle.cxx b/gui/webdisplay/src/RWebDisplayHandle.cxx
index 7d3236ac94eb710b5e07d2f0e397f3adf4cf6043..333188883d544928eac04052667518b30a3b29ed 100644
--- a/gui/webdisplay/src/RWebDisplayHandle.cxx
+++ b/gui/webdisplay/src/RWebDisplayHandle.cxx
@@ -139,7 +139,19 @@ ROOT::Experimental::RWebDisplayHandle::BrowserCreator::BrowserCreator(bool custo
    if (custom) return;
 
    if (!exec.empty()) {
-      fExec = exec;
+      if (exec.find("$url") == std::string::npos) {
+         fProg = exec;
+#ifdef _MSC_VER
+         fExec = exec + " $url";
+#else
+         fExec = exec + " $url &";
+#endif
+      } else {
+         fExec = exec;
+         auto pos = exec.find(" ");
+         if (pos != std::string::npos)
+            fProg = exec.substr(0, pos);
+      }
    } else if (gSystem->InheritsFrom("TMacOSXSystem")) {
       fExec = "open \'$url\'";
    } else if (gSystem->InheritsFrom("TWinNTSystem")) {