diff --git a/gui/cefdisplay/inc/base_handler.h b/gui/cefdisplay/inc/base_handler.h
index e382bdfc178ffaf1c84ccd1fd2cc987891be1775..69316fb6231d2f9e99f53932ac079eb8d8f84af9 100644
--- a/gui/cefdisplay/inc/base_handler.h
+++ b/gui/cefdisplay/inc/base_handler.h
@@ -73,4 +73,4 @@ private:
    DISALLOW_COPY_AND_ASSIGN(BaseHandler);
 };
 
-#endif // ROOT_cef_osr_handler
+#endif // ROOT_cef_base_handler
diff --git a/gui/cefdisplay/inc/simple_app.h b/gui/cefdisplay/inc/simple_app.h
index 2e5949a9a46bbbf14e39c38c4ac0a4094fb9aab7..2c0cbb38e46299dd91fdf4588d7995588ef6be49 100644
--- a/gui/cefdisplay/inc/simple_app.h
+++ b/gui/cefdisplay/inc/simple_app.h
@@ -17,8 +17,8 @@
  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
  *************************************************************************/
 
-#ifndef CEF_TESTS_CEFSIMPLE_SIMPLE_APP_H_
-#define CEF_TESTS_CEFSIMPLE_SIMPLE_APP_H_
+#ifndef ROOT_cef_simple_app
+#define ROOT_cef_simple_app
 
 #include "include/cef_app.h"
 
@@ -69,4 +69,4 @@ private:
    DISALLOW_COPY_AND_ASSIGN(SimpleApp);
 };
 
-#endif // CEF_TESTS_CEFSIMPLE_SIMPLE_APP_H_
+#endif // ROOT_cef_simple_app
diff --git a/gui/cefdisplay/src/base_handler.cxx b/gui/cefdisplay/src/base_handler.cxx
index a90969f4fa375b6c6933141eb8ae4260eda70a53..f09602249347e8f28c8462f2a59f0b6bfc0eb064 100644
--- a/gui/cefdisplay/src/base_handler.cxx
+++ b/gui/cefdisplay/src/base_handler.cxx
@@ -138,7 +138,7 @@ bool BaseHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
       R__ERROR_HERE("CEF") << Form("CEF: %s:%d: %s", source.ToString().c_str(), line, message.ToString().c_str());
       break;
    default:
-      if (gDebug > 0)
+      // if (gDebug > 0)
          R__DEBUG_HERE("CEF") << Form("CEF: %s:%d: %s", source.ToString().c_str(), line, message.ToString().c_str());
       break;
    }
diff --git a/gui/cefdisplay/src/cef_main.cxx b/gui/cefdisplay/src/cef_main.cxx
index aa78922e4af3e3a373a0f65afce020f9477ce30b..762a7a484515183eed45060a3e59b361758f037d 100644
--- a/gui/cefdisplay/src/cef_main.cxx
+++ b/gui/cefdisplay/src/cef_main.cxx
@@ -56,7 +56,7 @@ private:
 // Entry point function for all processes.
 int main(int argc, char *argv[])
 {
-   // printf("Starting CEF_MAIN ARGC %d\n", argc);
+   printf("Starting CEF_MAIN ARGC %d\n", argc);
    // for (int n = 1; n < argc; n++) printf("ARGV[%d] = %s\n", n, argv[n]);
 
 #if defined(OS_WIN)
diff --git a/gui/cefdisplay/src/simple_app.cxx b/gui/cefdisplay/src/simple_app.cxx
index 7061f9705605b54a4e83908a3ffaa737a42b4724..c7732b96ef8dbfd9ac0f0fa41b406cb3fb8771a6 100644
--- a/gui/cefdisplay/src/simple_app.cxx
+++ b/gui/cefdisplay/src/simple_app.cxx
@@ -117,14 +117,16 @@ public:
          response->SetStatus(200);
          response_length = fArg->GetContentLength();
 
+         printf("SET RESPONSE len %d type %s\n", (int) response_length, fArg->GetContentType());
+
          if (fArg->NumHeader() > 0) {
-            //printf("******* Response with extra headers\n");
+            printf("******* Response with extra headers\n");
             CefResponse::HeaderMap headers;
             for (Int_t n = 0; n < fArg->NumHeader(); ++n) {
                TString name = fArg->GetHeaderName(n);
                TString value = fArg->GetHeader(name.Data());
                headers.emplace(CefString(name.Data()), CefString(value.Data()));
-               //printf("   header %s %s\n", name.Data(), value.Data());
+               printf("   header %s %s\n", name.Data(), value.Data());
             }
             response->SetHeaderMap(headers);
          }
@@ -155,6 +157,8 @@ public:
          bytes_read = transfer_size;
       }
 
+      printf("ReadResponse  bytes_to_read %d bytes_read %d Total size %d Offset %d\n", bytes_to_read, bytes_read, fArg->GetContentLength(), fTransferOffset);
+
       // if content fully copied - can release reference, object will be cleaned up
       if (fTransferOffset >= fArg->GetContentLength())
          fArg.reset();
@@ -205,13 +209,14 @@ private:
 class ROOTSchemeHandlerFactory : public CefSchemeHandlerFactory {
 protected:
 public:
-   explicit ROOTSchemeHandlerFactory() : CefSchemeHandlerFactory() {}
+   explicit ROOTSchemeHandlerFactory() = default;
 
    CefRefPtr<CefResourceHandler> Create(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame,
                                         const CefString &scheme_name, CefRefPtr<CefRequest> request) OVERRIDE
    {
       std::string addr = request->GetURL().ToString();
 
+      printf("REQUEST %s\n", addr.c_str());
 
       TUrl url(addr.c_str());
 
@@ -224,15 +229,17 @@ public:
       if (gHandlingServer->IsFileRequested(inp_path, fname)) {
          // process file - no need for special requests handling
 
-         // printf("Sending file %s via cef\n", fname.Data());
-
          const char *mime = THttpServer::GetMimeType(fname.Data());
 
-         std::string str_content = THttpServer::ReadFileContent(fname.Data());
+         // static std::string str_content = THttpServer::ReadFileContent(fname.Data());
+
+         printf("Sending file %s mime %s\n", fname.Data(), mime);
 
          // Create a stream reader for |html_content|.
-         CefRefPtr<CefStreamReader> stream = CefStreamReader::CreateForData(
-            static_cast<void *>(const_cast<char *>(str_content.c_str())), str_content.size());
+         //CefRefPtr<CefStreamReader> stream = CefStreamReader::CreateForData(
+         //   static_cast<void *>(const_cast<char *>(str_content.c_str())), str_content.size());
+
+         CefRefPtr<CefStreamReader> stream = CefStreamReader::CreateForFile(fname.Data());
 
          // Constructor for HTTP status code 200 and no custom response headers.
          // There鈥檚 also a version of the constructor for custom status code and response headers.
@@ -241,6 +248,8 @@ public:
 
       std::string inp_method = request->GetMethod().ToString();
 
+      printf("REQUEST METHOD %s\n", inp_method.c_str());
+
       TGuiResourceHandler *handler = new TGuiResourceHandler();
       handler->fArg->SetMethod(inp_method.c_str());
       handler->fArg->SetPathAndFileName(inp_path);
@@ -300,9 +309,9 @@ void SimpleApp::OnRegisterCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar)
 
 void SimpleApp::OnBeforeCommandLineProcessing(const CefString &process_type, CefRefPtr<CefCommandLine> command_line)
 {
-//   std::string name = process_type.ToString();
-//   std::string prog = command_line->GetProgram().ToString();
-//   printf("OnBeforeCommandLineProcessing %s %s\n", name.c_str(), prog.c_str());
+   std::string name = process_type.ToString();
+   std::string prog = command_line->GetProgram().ToString();
+   printf("OnBeforeCommandLineProcessing %s %s\n", name.c_str(), prog.c_str());
 //   if (fBatch) {
 //      command_line->AppendSwitch("disable-gpu");
 //      command_line->AppendSwitch("disable-gpu-compositing");
@@ -315,20 +324,27 @@ void SimpleApp::OnBeforeChildProcessLaunch(CefRefPtr<CefCommandLine> command_lin
    std::string newprog = fCefMain;
    command_line->SetProgram(newprog);
 
-   // printf("OnBeforeChildProcessLaunch %s\n", command_line->GetProgram().ToString().c_str());
+   printf("OnBeforeChildProcessLaunch %s LastBatch %s\n", command_line->GetProgram().ToString().c_str(), fLastBatch ? "true" : "false");
+
+
    if (fLastBatch) {
       command_line->AppendSwitch("disable-webgl");
       command_line->AppendSwitch("disable-gpu");
       command_line->AppendSwitch("disable-gpu-compositing");
 //      command_line->AppendSwitch("disable-gpu-sandbox");
    }
+
+   auto str = command_line->GetCommandLineString().ToString();
+   printf("RUNNING %s\n", str.c_str());
+
+
 }
 
 void SimpleApp::OnContextInitialized()
 {
    CEF_REQUIRE_UI_THREAD();
 
-   CefRegisterSchemeHandlerFactory("http", "rootserver.local", new ROOTSchemeHandlerFactory());
+   // CefRegisterSchemeHandlerFactory("http", "rootserver.local", new ROOTSchemeHandlerFactory());
 
    if (!fFirstUrl.empty())
       StartWindow(fFirstUrl, fFirstBatch, fFirstRect);
@@ -340,14 +356,25 @@ void SimpleApp::StartWindow(const std::string &addr, bool batch, CefRect &rect)
 
    fLastBatch = batch;
 
-   std::string url = "http://rootserver.local";
-   url.append(addr);
-   if (url.find("?") != std::string::npos)
-      url.append("&");
-   else
-      url.append("?");
+   std::string url;
+
+   // TODO: later one should be able both remote and local
+
+   if (gHandlingServer) {
+      url = "http://rootserver.local";
+      url.append(addr);
+      if (url.find("?") != std::string::npos)
+         url.append("&");
+      else
+         url.append("?");
+
+      url.append("platform=cef3&ws=longpoll");
+   } else {
+      url = addr;
+   }
+
+   printf("HANDLING SERVER %p url %s\n", gHandlingServer, url.c_str());
 
-   url.append("platform=cef3&ws=longpoll");
 
    // Specify CEF browser settings here.
    CefBrowserSettings browser_settings;
@@ -382,18 +409,12 @@ void SimpleApp::StartWindow(const std::string &addr, bool batch, CefRect &rect)
    // via the command-line. Otherwise, create the browser using the native
    // platform framework. The Views framework is currently only supported on
    // Windows and Linux.
-
-   CefRefPtr<CefCommandLine> command_line = CefCommandLine::GetGlobalCommandLine();
-
-// bool use_views = command_line->HasSwitch("use-views");
 #else
-// bool use_views = false;
+   fUseViewes = false;
 #endif
 
-   if (!fGuiHandler) {
-      fUseViewes = false;
+   if (!fGuiHandler)
       fGuiHandler = new GuiHandler(gHandlingServer, fUseViewes);
-   }
 
    // SimpleHandler implements browser-level callbacks.
    // CefRefPtr<GuiHandler> handler(new GuiHandler(gHandlingServer, use_views));
@@ -441,10 +462,10 @@ protected:
 
       std::unique_ptr<RWebDisplayHandle> Display(const RWebDisplayArgs &args) override
       {
-         if (!args.GetHttpServer()) {
-            R__ERROR_HERE("CEF") << "CEF do not support loading of external HTTP pages";
-            return nullptr;
-         }
+         // if (!args.GetHttpServer()) {
+         //    R__ERROR_HERE("CEF") << "CEF do not support loading of external HTTP pages";
+         //   return nullptr;
+         // }
 
          if (fCefApp) {
             if (gHandlingServer != args.GetHttpServer()) {
@@ -502,21 +523,26 @@ protected:
          path2.Form("%s/Resources/locales/", cef_path);
          cef_main.Form("%s/bin/cef_main", rootsys);
 
-         cef_string_ascii_to_utf16(path.Data(), path.Length(), &settings.resources_dir_path);
+         // cef_string_ascii_to_utf16(path.Data(), path.Length(), &settings.resources_dir_path);
 
-         cef_string_ascii_to_utf16(path2.Data(), path2.Length(), &settings.locales_dir_path);
+         // cef_string_ascii_to_utf16(path2.Data(), path2.Length(), &settings.locales_dir_path);
 
-         settings.no_sandbox = true;
+         // settings.no_sandbox = 1;
          // if (gROOT->IsWebDisplayBatch()) settings.single_process = true;
 
          // if (batch_mode)
-         settings.windowless_rendering_enabled = true;
+         // settings.windowless_rendering_enabled = true;
 
-         TString plog = "cef.log";
-         cef_string_ascii_to_utf16(plog.Data(), plog.Length(), &settings.log_file);
-         settings.log_severity = LOGSEVERITY_INFO; // LOGSEVERITY_VERBOSE;
+         settings.external_message_pump = true;
+         settings.multi_threaded_message_loop = false;
+
+         std::string plog = "cef.log";
+         cef_string_ascii_to_utf16(plog.c_str(), plog.length(), &settings.log_file);
+
+         settings.log_severity = LOGSEVERITY_VERBOSE; // LOGSEVERITY_INFO, LOGSEVERITY_WARNING, LOGSEVERITY_ERROR, LOGSEVERITY_DISABLE
          // settings.uncaught_exception_stack_size = 100;
          // settings.ignore_certificate_errors = true;
+
          // settings.remote_debugging_port = 7890;
 
          gHandlingServer = args.GetHttpServer();