diff --git a/tutorials/http/httpgeom.C b/tutorials/http/httpgeom.C
new file mode 100644
index 0000000000000000000000000000000000000000..06447f16bbc08e9ea4c02b6ad78c295ed2f25551
--- /dev/null
+++ b/tutorials/http/httpgeom.C
@@ -0,0 +1,106 @@
+/// \file
+/// \ingroup tutorial_http
+///  This program creates trivial geometry with several tracks and
+///  configure online monitoring of geometry via THttpServer
+///  Geometry regularly changed by the program and correspondent changes immediately seen in the browser
+///
+/// \macro_code
+///
+/// \author Sergey Linev
+
+#include "THttpServer.h"
+#include "TGeoManager.h"
+#include "TGeoMaterial.h"
+#include "TGeoMedium.h"
+#include "TGeoVolume.h"
+#include "TGeoTrack.h"
+#include "TRandom.h"
+#include "TTimer.h"
+#include "TPad.h"
+
+THttpServer *serv = nullptr;
+bool drawing = false;
+int interval = 2000;
+
+void create_geo()
+{
+   if (gGeoManager) {
+      serv->Unregister(gGeoManager);
+      delete gGeoManager;
+   }
+
+   new TGeoManager("world", "the simplest geometry");
+
+   if (serv) {
+      serv->Register("/", gGeoManager);
+      // enable monitoring and
+      // specify item to draw when page is opened
+      // serv->SetItemField("/","_layout","grid2x2");
+      serv->SetItemField("/","_monitoring",Form("%d",interval));
+      serv->SetItemField("/","_drawitem","world");
+      serv->SetItemField("/","_drawopt","tracks");
+   }
+
+   auto rnd = gRandom;
+
+   TGeoMaterial *mat = new TGeoMaterial("Vacuum",0,0,0);
+   mat->SetTransparency(50);
+   TGeoMedium   *med = new TGeoMedium("Vacuum",1,mat);
+
+   TGeoVolume *top = gGeoManager->MakeBox("Top",med, 10+5*rnd->Rndm(), 10+5*rnd->Rndm(), 10+5*rnd->Rndm());
+   gGeoManager->SetTopVolume(top);
+   top->SetFillColor(3);
+
+   TGeoVolume *in = gGeoManager->MakeBox("In",med, 2.,2.,2.);
+   in->SetFillColor(2);
+   TGeoCombiTrans *tr = new TGeoCombiTrans("tr");
+   double x = -8+16*rnd->Rndm();
+   double y = -8+16*rnd->Rndm();
+   double z = -8+16*rnd->Rndm();
+   tr->SetTranslation (x, y, z);
+   tr->RegisterYourself();
+   top->AddNode(in, 1, tr);
+
+   gGeoManager->CloseGeometry();
+
+   top->SetLineColor(kMagenta);
+   if (rnd->Rndm() < 0.5)
+      in->SetLineColor(kGreen);
+   else
+      in->SetLineColor(kBlack);
+
+   for (int j=0; j<50; j++)
+   {
+       Int_t track_index = gGeoManager->AddTrack(2,22);
+       auto track = gGeoManager->GetTrack(track_index);
+       if (rnd->Rndm() < 0.5)
+           track->SetLineColor(kRed);
+       else
+           track->SetLineColor(kBlue);
+       track->SetLineWidth(2);
+
+       track->AddPoint(x, y, z, 0);
+       track->AddPoint(-10 + 20*rnd->Rndm(), -10 + 20*rnd->Rndm(), -10 + 20*rnd->Rndm(), 0);
+   }
+
+   if (drawing) {
+      // add "showtop" option to display top volume in JSROOT
+      // gGeoManager->SetTopVisible();
+
+      top->Draw();
+      gGeoManager->DrawTracks();
+      gPad->Modified();
+      gPad->Update();
+   }
+}
+
+
+void httpgeom()
+{
+   drawing = false; // to enable canvas drawing
+
+   serv = new THttpServer("http:8090");
+
+   TTimer *timer = new TTimer("create_geo()", interval);
+   timer->TurnOn();
+}