diff --git a/src/Aspect/Aspect_Background.cxx b/src/Aspect/Aspect_Background.cxx
index 220c9332ae..88739b2efc 100644
--- a/src/Aspect/Aspect_Background.cxx
+++ b/src/Aspect/Aspect_Background.cxx
@@ -23,6 +23,7 @@
 
 #include <Aspect_Background.hxx>
 #include <Quantity_Color.hxx>
+#include <Standard_Dump.hxx>
 
 //-Aliases
 //-Global data definitions
@@ -56,3 +57,14 @@ Quantity_Color Aspect_Background::Color () const {
 	return (MyColor);
 
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void Aspect_Background::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_CLASS_BEGIN (theOStream, Aspect_Background)
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &MyColor)
+}
diff --git a/src/Aspect/Aspect_Background.hxx b/src/Aspect/Aspect_Background.hxx
index f37eec2613..64630779f2 100644
--- a/src/Aspect/Aspect_Background.hxx
+++ b/src/Aspect/Aspect_Background.hxx
@@ -46,6 +46,9 @@ public:
   
   //! Returns the colour of the window background <me>.
   Standard_EXPORT Quantity_Color Color() const;
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 
 
diff --git a/src/Aspect/Aspect_CircularGrid.cxx b/src/Aspect/Aspect_CircularGrid.cxx
index 7ba90c1c55..400fdeaac0 100644
--- a/src/Aspect/Aspect_CircularGrid.cxx
+++ b/src/Aspect/Aspect_CircularGrid.cxx
@@ -140,3 +140,20 @@ void Aspect_CircularGrid::Init () {
   myAlpha = M_PI / Standard_Real(myDivisionNumber);
   myA1 = Cos(myAlpha); myB1=Sin(myAlpha);
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Aspect_CircularGrid::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+
+  OCCT_DUMP_BASE_CLASS(theOStream, theDepth, Aspect_Grid)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRadiusStep)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDivisionNumber)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myAlpha)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myA1)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myB1)
+}
diff --git a/src/Aspect/Aspect_CircularGrid.hxx b/src/Aspect/Aspect_CircularGrid.hxx
index f3f82d1713..b8bb709ef9 100644
--- a/src/Aspect/Aspect_CircularGrid.hxx
+++ b/src/Aspect/Aspect_CircularGrid.hxx
@@ -55,6 +55,9 @@ public:
   Standard_EXPORT Standard_Integer DivisionNumber() const;
   
   Standard_EXPORT virtual void Init() Standard_OVERRIDE;
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
 
 private:
 
diff --git a/src/Aspect/Aspect_GenId.cxx b/src/Aspect/Aspect_GenId.cxx
index 6788bb50f7..ea4937551d 100644
--- a/src/Aspect/Aspect_GenId.cxx
+++ b/src/Aspect/Aspect_GenId.cxx
@@ -18,6 +18,8 @@
 #include <Aspect_GenId.hxx>
 #include <Aspect_IdentDefinitionError.hxx>
 
+#include <Standard_Dump.hxx>
+
 // =======================================================================
 // function : Aspect_GenId
 // purpose  :
@@ -114,3 +116,21 @@ Standard_Boolean Aspect_GenId::Next (Standard_Integer& theId)
   theId = myLowerBound + myLength - myFreeCount - 1;
   return Standard_True;
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void Aspect_GenId::DumpJson (Standard_OStream& theOStream, Standard_Integer) const
+{
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myFreeCount)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myLength)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myLowerBound)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myUpperBound)
+
+  for (TColStd_ListOfInteger::Iterator anIter (myFreeIds); anIter.More(); anIter.Next())
+  {
+    Standard_Integer aFreeId = anIter.Value();
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, aFreeId)
+  }
+}
diff --git a/src/Aspect/Aspect_GenId.hxx b/src/Aspect/Aspect_GenId.hxx
index c565d3d1f2..73d6702ce3 100644
--- a/src/Aspect/Aspect_GenId.hxx
+++ b/src/Aspect/Aspect_GenId.hxx
@@ -72,6 +72,9 @@ public:
   
   //! Returns the upper identifier in range.
   Standard_Integer Upper() const { return myUpperBound; }
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 private:
 
diff --git a/src/Aspect/Aspect_GradientBackground.cxx b/src/Aspect/Aspect_GradientBackground.cxx
index aa49d0ac3c..6bbfc67a34 100644
--- a/src/Aspect/Aspect_GradientBackground.cxx
+++ b/src/Aspect/Aspect_GradientBackground.cxx
@@ -55,3 +55,18 @@ Aspect_GradientFillMethod Aspect_GradientBackground::BgGradientFillMethod( ) con
 {
   return MyGradientMethod;
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void Aspect_GradientBackground::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_CLASS_BEGIN (theOStream, Aspect_GradientBackground)
+
+  Quantity_Color aColor = Color();
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &aColor)
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &MyColor2)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, MyGradientMethod)
+}
diff --git a/src/Aspect/Aspect_GradientBackground.hxx b/src/Aspect/Aspect_GradientBackground.hxx
index ea3e7d594f..2bc111e731 100644
--- a/src/Aspect/Aspect_GradientBackground.hxx
+++ b/src/Aspect/Aspect_GradientBackground.hxx
@@ -51,6 +51,9 @@ public:
   
   //! Returns the current gradient background fill mode.
   Standard_EXPORT Aspect_GradientFillMethod BgGradientFillMethod() const;
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 
 
diff --git a/src/Aspect/Aspect_Grid.cxx b/src/Aspect/Aspect_Grid.cxx
index e06917f495..eed3460bd8 100644
--- a/src/Aspect/Aspect_Grid.cxx
+++ b/src/Aspect/Aspect_Grid.cxx
@@ -104,3 +104,22 @@ void Aspect_Grid::SetDrawMode (const Aspect_GridDrawMode theDrawMode)
   myDrawMode = theDrawMode;
   UpdateDisplay();
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Aspect_Grid::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRotationAngle)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myXOrigin)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myYOrigin)
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColor)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myTenthColor)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsActive)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDrawMode)
+}
diff --git a/src/Aspect/Aspect_Grid.hxx b/src/Aspect/Aspect_Grid.hxx
index 8127e46bb8..a7034b9edd 100644
--- a/src/Aspect/Aspect_Grid.hxx
+++ b/src/Aspect/Aspect_Grid.hxx
@@ -96,6 +96,9 @@ public:
   Standard_EXPORT virtual Standard_Boolean IsDisplayed() const = 0;
   
   Standard_EXPORT virtual void Init() = 0;
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 protected:
 
diff --git a/src/Aspect/Aspect_RectangularGrid.cxx b/src/Aspect/Aspect_RectangularGrid.cxx
index b41c32f277..ad8712fafd 100644
--- a/src/Aspect/Aspect_RectangularGrid.cxx
+++ b/src/Aspect/Aspect_RectangularGrid.cxx
@@ -155,3 +155,25 @@ Standard_Boolean Aspect_RectangularGrid::CheckAngle(const Standard_Real alpha,
                                             const Standard_Real beta) const {
   return (Abs( Sin(alpha) * Cos(beta + M_PI / 2.) - Cos(alpha) * Sin(beta + M_PI / 2.)) != 0) ;
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Aspect_RectangularGrid::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+
+  OCCT_DUMP_BASE_CLASS(theOStream, theDepth, Aspect_Grid)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myXStep)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myYStep)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myFirstAngle)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, mySecondAngle)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, a1)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, b1)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, c1)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, a2)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, b2)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, c2)
+}
diff --git a/src/Aspect/Aspect_RectangularGrid.hxx b/src/Aspect/Aspect_RectangularGrid.hxx
index 14dd93cdc5..8e4146e95d 100644
--- a/src/Aspect/Aspect_RectangularGrid.hxx
+++ b/src/Aspect/Aspect_RectangularGrid.hxx
@@ -67,6 +67,9 @@ public:
   Standard_EXPORT Standard_Real SecondAngle() const;
   
   Standard_EXPORT virtual void Init() Standard_OVERRIDE;
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
 
 private:
 
diff --git a/src/Aspect/Aspect_Window.cxx b/src/Aspect/Aspect_Window.cxx
index 6f1d31018d..d41d1250b7 100644
--- a/src/Aspect/Aspect_Window.cxx
+++ b/src/Aspect/Aspect_Window.cxx
@@ -92,3 +92,18 @@ void Aspect_Window::SetBackground (const Quantity_Color& theFirstColor,
 {
   MyGradientBackground.SetColors (theFirstColor, theSecondColor, theFillMethod);
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Aspect_Window::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &MyBackground)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &MyGradientBackground)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, MyBackgroundFillMethod)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, MyIsVirtual)
+}
diff --git a/src/Aspect/Aspect_Window.hxx b/src/Aspect/Aspect_Window.hxx
index 0fc634cba4..dff828ce96 100644
--- a/src/Aspect/Aspect_Window.hxx
+++ b/src/Aspect/Aspect_Window.hxx
@@ -114,6 +114,9 @@ public:
   //! on platforms implementing thread-unsafe connections to display.
   //! NULL can be passed instead otherwise.
   virtual void InvalidateContent (const Handle(Aspect_DisplayConnection)& theDisp) { (void )theDisp; }
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
   DEFINE_STANDARD_RTTIEXT(Aspect_Window,Standard_Transient)
 
diff --git a/src/Graphic3d/FILES b/src/Graphic3d/FILES
index 31ac882481..69e09418f2 100755
--- a/src/Graphic3d/FILES
+++ b/src/Graphic3d/FILES
@@ -39,6 +39,7 @@ Graphic3d_BvhCStructureSetTrsfPers.cxx
 Graphic3d_BvhCStructureSetTrsfPers.hxx
 Graphic3d_Camera.cxx
 Graphic3d_Camera.hxx
+Graphic3d_CameraTile.cxx
 Graphic3d_CameraTile.hxx
 Graphic3d_CappingFlags.hxx
 Graphic3d_CLight.cxx
@@ -116,6 +117,7 @@ Graphic3d_PolygonOffset.cxx
 Graphic3d_PolygonOffset.hxx
 Graphic3d_PriorityDefinitionError.hxx
 Graphic3d_RenderingMode.hxx
+Graphic3d_RenderingParams.cxx
 Graphic3d_RenderingParams.hxx
 Graphic3d_RenderTransparentMethod.hxx
 Graphic3d_SequenceOfGroup.hxx
diff --git a/src/Graphic3d/Graphic3d_AspectText3d.cxx b/src/Graphic3d/Graphic3d_AspectText3d.cxx
index a7c9fe36af..22ace08ffb 100644
--- a/src/Graphic3d/Graphic3d_AspectText3d.cxx
+++ b/src/Graphic3d/Graphic3d_AspectText3d.cxx
@@ -55,3 +55,13 @@ Graphic3d_AspectText3d::Graphic3d_AspectText3d (const Quantity_Color& theColor,
     myTextFont = new TCollection_HAsciiString (theFont);
   }
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void Graphic3d_AspectText3d::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  OCCT_DUMP_BASE_CLASS(theOStream, theDepth, Graphic3d_Aspects)
+}
diff --git a/src/Graphic3d/Graphic3d_AspectText3d.hxx b/src/Graphic3d/Graphic3d_AspectText3d.hxx
index ec3cd669d8..70a558123f 100644
--- a/src/Graphic3d/Graphic3d_AspectText3d.hxx
+++ b/src/Graphic3d/Graphic3d_AspectText3d.hxx
@@ -110,6 +110,9 @@ public:
 
   //! Returns text FontAspect
   Font_FontAspect GetTextFontAspect() const { return myTextFontAspect; }
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
 
 };
 
diff --git a/src/Graphic3d/Graphic3d_Aspects.hxx b/src/Graphic3d/Graphic3d_Aspects.hxx
index bc024802aa..65b9f1a70d 100644
--- a/src/Graphic3d/Graphic3d_Aspects.hxx
+++ b/src/Graphic3d/Graphic3d_Aspects.hxx
@@ -537,7 +537,7 @@ public:
   }
 
   //! Dumps the content of me into the stream
-  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 
 protected:
diff --git a/src/Graphic3d/Graphic3d_CLight.cxx b/src/Graphic3d/Graphic3d_CLight.cxx
index 0e8941cd2d..f46c67587c 100644
--- a/src/Graphic3d/Graphic3d_CLight.cxx
+++ b/src/Graphic3d/Graphic3d_CLight.cxx
@@ -245,4 +245,50 @@ void Graphic3d_CLight::SetRange (Standard_ShortReal theValue)
   Standard_OutOfRange_Raise_if (theValue < 0.0, "Graphic3d_CLight::SetRange(), Bad value for falloff range");
   updateRevisionIf (Abs (Range() - theValue) > ShortRealEpsilon());
   myDirection.w() = theValue;
-};
\ No newline at end of file
+};
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Graphic3d_CLight::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, this)
+  
+  OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myId)
+  OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myName)
+  
+  if (myType == Graphic3d_TOLS_SPOT || myType == Graphic3d_TOLS_POSITIONAL)
+  {
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myPosition)
+  }
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColor)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIntensity)
+
+  if (myType == Graphic3d_TOLS_SPOT || myType == Graphic3d_TOLS_DIRECTIONAL)
+  {
+    gp_Dir aDirection = Direction();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &aDirection)
+  }
+  if (myType == Graphic3d_TOLS_POSITIONAL || myType == Graphic3d_TOLS_SPOT)
+  {
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ConstAttenuation())
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, LinearAttenuation())
+  }
+  if (myType == Graphic3d_TOLS_SPOT)
+  {
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, Angle())
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, Concentration())
+  }
+  if (myType == Graphic3d_TOLS_POSITIONAL || myType == Graphic3d_TOLS_SPOT)
+  {
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, Range())
+  }
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, mySmoothness)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myType)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRevision)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsHeadlight)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsEnabled)
+}
diff --git a/src/Graphic3d/Graphic3d_CLight.hxx b/src/Graphic3d/Graphic3d_CLight.hxx
index 54276d7cc2..a52f0dad2c 100644
--- a/src/Graphic3d/Graphic3d_CLight.hxx
+++ b/src/Graphic3d/Graphic3d_CLight.hxx
@@ -204,6 +204,9 @@ public:
 
   //! @return modification counter
   Standard_Size Revision() const { return myRevision; }
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 private:
 
diff --git a/src/Graphic3d/Graphic3d_CView.cxx b/src/Graphic3d/Graphic3d_CView.cxx
index 27f71d4e1d..2219b947e9 100644
--- a/src/Graphic3d/Graphic3d_CView.cxx
+++ b/src/Graphic3d/Graphic3d_CView.cxx
@@ -1407,3 +1407,46 @@ void Graphic3d_CView::DiagnosticInformation (TColStd_IndexedDataMapOfStringStrin
     theDict.ChangeFromIndex (theDict.Add ("VRserial",  aSerial))  = aSerial;
   }
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Graphic3d_CView::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  
+  OCCT_DUMP_BASE_CLASS (theOStream, theDepth, Graphic3d_DataStructureManager);
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myId)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myRenderParams)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myBgColor)
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myStructureManager)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myCamera.get())
+
+  for (Graphic3d_SequenceOfStructure::Iterator anIter (myStructsToCompute); anIter.More(); anIter.Next())
+  {
+    const Handle(Graphic3d_Structure)& aStructToCompute = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aStructToCompute.get())
+  }
+
+  for (Graphic3d_SequenceOfStructure::Iterator anIter (myStructsComputed); anIter.More(); anIter.Next())
+  {
+    const Handle(Graphic3d_Structure)& aStructComputed = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aStructComputed.get())
+  }
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsInComputedMode)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsActive)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsRemoved)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myShadingModel)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myVisualization)
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myBackXRCamera.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myBaseXRCamera.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myPosedXRCamera.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myPosedXRCameraCopy.get())
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myUnitFactor)
+}
diff --git a/src/Graphic3d/Graphic3d_CView.hxx b/src/Graphic3d/Graphic3d_CView.hxx
index d0c0887347..b54664cc35 100644
--- a/src/Graphic3d/Graphic3d_CView.hxx
+++ b/src/Graphic3d/Graphic3d_CView.hxx
@@ -534,6 +534,9 @@ public: //! @name obsolete Graduated Trihedron functionality
     (void )theMin;
     (void )theMax;
   }
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
 
 private:
 
diff --git a/src/Graphic3d/Graphic3d_Camera.cxx b/src/Graphic3d/Graphic3d_Camera.cxx
index 541a1006bb..e1056d6a58 100644
--- a/src/Graphic3d/Graphic3d_Camera.cxx
+++ b/src/Graphic3d/Graphic3d_Camera.cxx
@@ -1742,4 +1742,23 @@ void Graphic3d_Camera::DumpJson (Standard_OStream& theOStream, Standard_Integer
   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myEye)
 
   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDistance)
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myAxialScale)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myProjType)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myFOVy)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myZNear)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myZFar)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myAspect)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myScale)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myZFocus)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myZFocusType)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIOD)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIODType)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myTile)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myMatricesD)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myMatricesF)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myWorldViewProjState)
 }
diff --git a/src/Graphic3d/Graphic3d_Camera.hxx b/src/Graphic3d/Graphic3d_Camera.hxx
index 8aee88ec6f..5a819622fc 100644
--- a/src/Graphic3d/Graphic3d_Camera.hxx
+++ b/src/Graphic3d/Graphic3d_Camera.hxx
@@ -78,6 +78,23 @@ private:
 
     //! Return true if Projection was not invalidated.
     Standard_Boolean IsProjectionValid()  const { return myIsProjectionValid;  }
+    
+    //! Dumps the content of me into the stream
+    void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const
+    {
+      if (IsOrientationValid())
+      {
+        OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &Orientation)
+      }
+      if (IsProjectionValid())
+      {
+        OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &MProjection)
+        OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &LProjection)
+        OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &RProjection)
+      }
+      OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsOrientationValid)
+      OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsProjectionValid)
+    }
 
   public:
 
diff --git a/src/Graphic3d/Graphic3d_CameraTile.cxx b/src/Graphic3d/Graphic3d_CameraTile.cxx
new file mode 100644
index 0000000000..dbc3868f50
--- /dev/null
+++ b/src/Graphic3d/Graphic3d_CameraTile.cxx
@@ -0,0 +1,30 @@
+// Created on: 2020-02-06
+// Created by: Svetlana SHUTINA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#include <Graphic3d_CameraTile.hxx>
+
+#include <Standard_Dump.hxx>
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Graphic3d_CameraTile::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &TotalSize)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &TileSize)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &Offset)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, IsTopDown)
+}
diff --git a/src/Graphic3d/Graphic3d_CameraTile.hxx b/src/Graphic3d/Graphic3d_CameraTile.hxx
index 9ad8051185..637ccae83f 100644
--- a/src/Graphic3d/Graphic3d_CameraTile.hxx
+++ b/src/Graphic3d/Graphic3d_CameraTile.hxx
@@ -16,6 +16,7 @@
 
 #include <Graphic3d_Vec2.hxx>
 #include <Standard_Integer.hxx>
+#include <Standard_OStream.hxx>
 #include <Standard_TypeDef.hxx>
 
 //! Class defines the area (Tile) inside a view.
@@ -82,6 +83,9 @@ public:
         && anOffset1.x() == anOffset2.x()
         && anOffset1.y() == anOffset2.y();
   }
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 };
 
diff --git a/src/Graphic3d/Graphic3d_DataStructureManager.cxx b/src/Graphic3d/Graphic3d_DataStructureManager.cxx
index b7ba3bc69a..41c5d24b33 100644
--- a/src/Graphic3d/Graphic3d_DataStructureManager.cxx
+++ b/src/Graphic3d/Graphic3d_DataStructureManager.cxx
@@ -23,6 +23,7 @@
 // for the class
 
 #include <Graphic3d_DataStructureManager.hxx>
+#include <Standard_Dump.hxx>
 #include <Standard_Type.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_DataStructureManager,Standard_Transient)
@@ -32,3 +33,12 @@ IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_DataStructureManager,Standard_Transient)
 //-Constructors
 Graphic3d_DataStructureManager::Graphic3d_DataStructureManager () {
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Graphic3d_DataStructureManager::DumpJson (Standard_OStream& theOStream, Standard_Integer) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+}
diff --git a/src/Graphic3d/Graphic3d_DataStructureManager.hxx b/src/Graphic3d/Graphic3d_DataStructureManager.hxx
index def5e631a7..9a1ebd9ff9 100644
--- a/src/Graphic3d/Graphic3d_DataStructureManager.hxx
+++ b/src/Graphic3d/Graphic3d_DataStructureManager.hxx
@@ -32,6 +32,7 @@ DEFINE_STANDARD_HANDLE(Graphic3d_DataStructureManager, Standard_Transient)
 //! It defines the global attributes.
 class Graphic3d_DataStructureManager : public Standard_Transient
 {
+
   DEFINE_STANDARD_RTTIEXT(Graphic3d_DataStructureManager,Standard_Transient)
 protected:
 
@@ -41,6 +42,9 @@ protected:
   //! Returns camera object of the view.
   virtual const Handle(Graphic3d_Camera)& Camera() const = 0;
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
+
 };
 
 #endif // _Graphic3d_DataStructureManager_HeaderFile
diff --git a/src/Graphic3d/Graphic3d_GraphicDriver.cxx b/src/Graphic3d/Graphic3d_GraphicDriver.cxx
index 8253b40005..4395ff576a 100644
--- a/src/Graphic3d/Graphic3d_GraphicDriver.cxx
+++ b/src/Graphic3d/Graphic3d_GraphicDriver.cxx
@@ -281,3 +281,20 @@ void Graphic3d_GraphicDriver::SetZLayerSettings (const Graphic3d_ZLayerId theLay
                          "Graphic3d_GraphicDriver::SetZLayerSettings, Layer with theLayerId does not exist");
   aLayerDef->SetLayerSettings (theSettings);
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void Graphic3d_GraphicDriver::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myStructGenId)
+
+  for (NCollection_List<Handle(Graphic3d_Layer)>::Iterator anIter (myLayers); anIter.More(); anIter.Next())
+  {
+    const Handle(Graphic3d_Layer)& aLayer = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aLayer.get())
+  }
+}
diff --git a/src/Graphic3d/Graphic3d_GraphicDriver.hxx b/src/Graphic3d/Graphic3d_GraphicDriver.hxx
index 6fe63e4c5c..20d6aedc48 100644
--- a/src/Graphic3d/Graphic3d_GraphicDriver.hxx
+++ b/src/Graphic3d/Graphic3d_GraphicDriver.hxx
@@ -155,6 +155,9 @@ public:
 
   //! Frees the identifier of a structure.
   Standard_EXPORT void RemoveIdentification(const Standard_Integer theId);
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 protected:
   
diff --git a/src/Graphic3d/Graphic3d_Group.cxx b/src/Graphic3d/Graphic3d_Group.cxx
index 53207a5af0..9ea7a7d29b 100644
--- a/src/Graphic3d/Graphic3d_Group.cxx
+++ b/src/Graphic3d/Graphic3d_Group.cxx
@@ -452,11 +452,15 @@ void Graphic3d_Group::AddText (const Handle(Graphic3d_Text)& theTextParams,
 // function : DumpJson
 // purpose  :
 // =======================================================================
-void Graphic3d_Group::DumpJson (Standard_OStream& theOStream, Standard_Integer) const
+void Graphic3d_Group::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
 {
   OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
 
   OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, this)
+
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myStructure)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myBounds)
+
   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsClosed)
   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myContainsFacet)
 }
diff --git a/src/Graphic3d/Graphic3d_RenderingParams.cxx b/src/Graphic3d/Graphic3d_RenderingParams.cxx
new file mode 100644
index 0000000000..dbf05ea1b2
--- /dev/null
+++ b/src/Graphic3d/Graphic3d_RenderingParams.cxx
@@ -0,0 +1,92 @@
+// Created on: 2020-02-06
+// Created by: Svetlana SHUTINA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#include <Graphic3d_RenderingParams.hxx>
+
+#include <Standard_Dump.hxx>
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void Graphic3d_RenderingParams::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, Method)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, TransparencyMethod)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, LineFeather)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, PbrEnvPow2Size)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, PbrEnvSpecMapNbLevels)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, PbrEnvBakingDiffNbSamples)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, PbrEnvBakingSpecNbSamples)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, PbrEnvBakingProbability)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, OitDepthFactor)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, NbMsaaSamples)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, RenderResolutionScale)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ToEnableDepthPrepass)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ToEnableAlphaToCoverage)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, IsGlobalIlluminationEnabled)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, SamplesPerPixel)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, RaytracingDepth)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, IsShadowEnabled)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, IsReflectionEnabled)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, IsAntialiasingEnabled)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, IsTransparentShadowEnabled)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, UseEnvironmentMapBackground)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ToIgnoreNormalMapInRayTracing)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, CoherentPathTracingMode)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, AdaptiveScreenSampling)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, AdaptiveScreenSamplingAtomic)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ShowSamplingTiles)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, TwoSidedBsdfModels)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, RadianceClampingValue)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, RebuildRayTracingShaders)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, RayTracingTileSize)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, NbRayTracingTiles)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, CameraApertureRadius)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, CameraFocalPlaneDist)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, FrustumCullingState)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ToneMappingMethod)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, Exposure)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, WhitePoint)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, StereoMode)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, AnaglyphFilter)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &AnaglyphLeft)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &AnaglyphRight)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ToReverseStereo)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, StatsPosition.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, ChartPosition.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &ChartSize)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, StatsTextAspect.get())
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, StatsUpdateInterval)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, StatsTextHeight)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, StatsNbFrames)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, StatsMaxChartTime)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, CollectedStats)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ToShowStats)
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, Resolution)
+}
diff --git a/src/Graphic3d/Graphic3d_RenderingParams.hxx b/src/Graphic3d/Graphic3d_RenderingParams.hxx
index 14ea591907..472311ff16 100644
--- a/src/Graphic3d/Graphic3d_RenderingParams.hxx
+++ b/src/Graphic3d/Graphic3d_RenderingParams.hxx
@@ -176,6 +176,9 @@ public:
   {
     return Resolution / static_cast<Standard_ShortReal> (THE_DEFAULT_RESOLUTION);
   }
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 public:
 
diff --git a/src/Graphic3d/Graphic3d_Structure.cxx b/src/Graphic3d/Graphic3d_Structure.cxx
index 3492a3fd73..3aa4780fdb 100644
--- a/src/Graphic3d/Graphic3d_Structure.cxx
+++ b/src/Graphic3d/Graphic3d_Structure.cxx
@@ -1041,8 +1041,22 @@ void Graphic3d_Structure::DumpJson (Standard_OStream& theOStream, Standard_Integ
 {
   OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
 
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myStructureManager)
   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myCStructure.get())
 
+  for (NCollection_IndexedMap<Graphic3d_Structure*>::Iterator anIter (myAncestors); anIter.More(); anIter.Next())
+  {
+    Graphic3d_Structure* anAncestor = anIter.Value();
+    OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, anAncestor)
+  }
+
+  for (NCollection_IndexedMap<Graphic3d_Structure*>::Iterator anIter (myDescendants); anIter.More(); anIter.Next())
+  {
+    Graphic3d_Structure* aDescendant = anIter.Value();
+    OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, aDescendant)
+  }
+
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myOwner)
   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myVisual)
   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myComputeVisual)
 }
diff --git a/src/Graphic3d/Graphic3d_StructureManager.cxx b/src/Graphic3d/Graphic3d_StructureManager.cxx
index 82dc50cea3..e979b644f3 100644
--- a/src/Graphic3d/Graphic3d_StructureManager.cxx
+++ b/src/Graphic3d/Graphic3d_StructureManager.cxx
@@ -446,3 +446,37 @@ void Graphic3d_StructureManager::ChangeZLayer (const Handle(Graphic3d_Structure)
     aViewIt.Value()->ChangeZLayer (theStructure, theLayerId);
   }
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void Graphic3d_StructureManager::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+
+  for (Graphic3d_MapOfStructure::Iterator anIter (myDisplayedStructure); anIter.More(); anIter.Next())
+  {
+    const Handle(Graphic3d_Structure)& aDisplayedStructure = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aDisplayedStructure.get())
+  }
+  for (Graphic3d_MapOfStructure::Iterator anIter (myHighlightedStructure); anIter.More(); anIter.Next())
+  {
+    const Handle(Graphic3d_Structure)& aHighlightedStructure = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aHighlightedStructure.get())
+  }
+  for (Graphic3d_MapOfObject::Iterator anIter (myRegisteredObjects); anIter.More(); anIter.Next())
+  {
+    const Handle(Graphic3d_ViewAffinity)& aRegisteredObject = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aRegisteredObject.get())
+  }
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myGraphicDriver.get())
+  for (Graphic3d_IndexedMapOfView::Iterator anIter (myDefinedViews); anIter.More(); anIter.Next())
+  {
+    Graphic3d_CView* aDefinedView = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aDefinedView)
+  }
+  
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDeviceLostFlag)
+}
diff --git a/src/Graphic3d/Graphic3d_StructureManager.hxx b/src/Graphic3d/Graphic3d_StructureManager.hxx
index e4676adcc7..19c376fa22 100644
--- a/src/Graphic3d/Graphic3d_StructureManager.hxx
+++ b/src/Graphic3d/Graphic3d_StructureManager.hxx
@@ -162,6 +162,9 @@ public:
 
   //! Sets Device Lost flag.
   void SetDeviceLost() { myDeviceLostFlag = Standard_True; }
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 protected:
 
diff --git a/src/Graphic3d/Graphic3d_Vertex.cxx b/src/Graphic3d/Graphic3d_Vertex.cxx
index df3b7405ff..d3f9ed7480 100644
--- a/src/Graphic3d/Graphic3d_Vertex.cxx
+++ b/src/Graphic3d/Graphic3d_Vertex.cxx
@@ -15,9 +15,22 @@
 
 #include <Graphic3d_Vertex.hxx>
 
+#include <gp_XYZ.hxx>
+#include <Standard_Dump.hxx>
+
 Standard_ShortReal Graphic3d_Vertex::Distance(const Graphic3d_Vertex& AOther) const
 {
   return sqrt( (X() - AOther.X()) * (X() - AOther.X())
 		     + (Y() - AOther.Y()) * (Y() - AOther.Y())
 		     + (Z() - AOther.Z()) * (Z() - AOther.Z()) );
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void Graphic3d_Vertex::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  gp_XYZ aCoord (xyz[0], xyz[1], xyz[2]);
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &aCoord)
+}
diff --git a/src/Graphic3d/Graphic3d_Vertex.hxx b/src/Graphic3d/Graphic3d_Vertex.hxx
index 136c9e9f9c..1f5d785ef0 100644
--- a/src/Graphic3d/Graphic3d_Vertex.hxx
+++ b/src/Graphic3d/Graphic3d_Vertex.hxx
@@ -102,6 +102,9 @@ public:
 
   //! Returns the distance between two points.
   Standard_EXPORT Standard_ShortReal Distance (const Graphic3d_Vertex& theOther) const;
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
   float xyz[3];
 
diff --git a/src/Graphic3d/Graphic3d_WorldViewProjState.hxx b/src/Graphic3d/Graphic3d_WorldViewProjState.hxx
index 0793bda90e..c46f38e411 100644
--- a/src/Graphic3d/Graphic3d_WorldViewProjState.hxx
+++ b/src/Graphic3d/Graphic3d_WorldViewProjState.hxx
@@ -141,6 +141,15 @@ public:
         && myWorldViewState  == theOther.myWorldViewState;
   }
 
+  //! Dumps the content of me into the stream
+  void DumpJson (Standard_OStream& theOStream, Standard_Integer) const
+  {
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsValid)
+    OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myCamera)
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myProjectionState)
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myWorldViewState)
+  }
+
 private:
 
   Standard_Boolean    myIsValid;
diff --git a/src/NCollection/NCollection_Vec2.hxx b/src/NCollection/NCollection_Vec2.hxx
index f54cae29de..38b354d1ac 100644
--- a/src/NCollection/NCollection_Vec2.hxx
+++ b/src/NCollection/NCollection_Vec2.hxx
@@ -17,6 +17,8 @@
 
 #include <cmath> // std::sqrt()
 
+#include <Standard_Dump.hxx>
+
 //! Auxiliary macros to define couple of similar access components as vector methods.
 //! @return 2 components by their names in specified order
 #define NCOLLECTION_VEC_COMPONENTS_2D(theX, theY) \
@@ -289,6 +291,13 @@ public:
     return NCollection_Vec2 (Element_t(0), Element_t(1));
   }
 
+  //! Dumps the content of me into the stream
+  void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const
+  {
+    (void)theDepth;
+    OCCT_DUMP_FIELD_VALUES_NUMERICAL (theOStream, "Vec2", 2, v[0], v[1])
+  }
+
 private:
 
   Element_t v[2];
diff --git a/src/NCollection/NCollection_Vec3.hxx b/src/NCollection/NCollection_Vec3.hxx
index 7e25b74e6d..108349fe61 100644
--- a/src/NCollection/NCollection_Vec3.hxx
+++ b/src/NCollection/NCollection_Vec3.hxx
@@ -18,7 +18,6 @@
 #include <cstring>
 #include <cmath>
 #include <NCollection_Vec2.hxx>
-#include <Standard_Dump.hxx>
 
 //! Auxiliary macros to define couple of similar access components as vector methods
 #define NCOLLECTION_VEC_COMPONENTS_3D(theX, theY, theZ) \
diff --git a/src/NCollection/NCollection_Vec4.hxx b/src/NCollection/NCollection_Vec4.hxx
index 52960a82a2..995033fe10 100644
--- a/src/NCollection/NCollection_Vec4.hxx
+++ b/src/NCollection/NCollection_Vec4.hxx
@@ -16,7 +16,6 @@
 #define _NCollection_Vec4_H__
 
 #include <NCollection_Vec3.hxx>
-#include <Standard_Dump.hxx>
 
 //! Generic 4-components vector.
 //! To be used as RGBA color vector or XYZW 3D-point with special W-component
diff --git a/src/SelectMgr/SelectMgr_Frustum.hxx b/src/SelectMgr/SelectMgr_Frustum.hxx
index 020247ca59..b2bcdecf83 100644
--- a/src/SelectMgr/SelectMgr_Frustum.hxx
+++ b/src/SelectMgr/SelectMgr_Frustum.hxx
@@ -64,6 +64,9 @@ public:
     memset (myMinVertsProjections, 0, sizeof (myMinVertsProjections));
   }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
+
 protected:
 
   // SAT Tests for different objects
diff --git a/src/SelectMgr/SelectMgr_Frustum.lxx b/src/SelectMgr/SelectMgr_Frustum.lxx
index b923f01864..248a9c258c 100644
--- a/src/SelectMgr/SelectMgr_Frustum.lxx
+++ b/src/SelectMgr/SelectMgr_Frustum.lxx
@@ -461,3 +461,49 @@ Standard_Boolean SelectMgr_Frustum<N>::hasOverlap (const gp_Pnt& thePnt1,
 
   return Standard_True;
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+template <int N>
+void SelectMgr_Frustum<N>::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+
+  const Standard_Integer anIncFactor = (myIsOrthographic && N == 4) ? 2 : 1;
+  for (Standard_Integer aPlaneIdx = 0; aPlaneIdx < N + 1; aPlaneIdx += anIncFactor)
+  {
+    const gp_Vec& aPlane = myPlanes[aPlaneIdx];
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &aPlane)
+
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myMaxVertsProjections[aPlaneIdx])
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myMinVertsProjections[aPlaneIdx])
+  }
+
+  for (Standard_Integer aVertIdx = 0; aVertIdx < N * 2; ++aVertIdx)
+  {
+    const gp_Pnt& aVertex = myVertices[aVertIdx];
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &aVertex)
+  }
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myPixelTolerance)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsOrthographic)
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myBuilder)
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myCamera)
+
+  for (Standard_Integer anIndex = 0; anIndex < 3; anIndex++)
+  {
+    Standard_Real aMaxOrthoVertsProjections = myMaxOrthoVertsProjections[anIndex];
+    Standard_Real aMinOrthoVertsProjections = myMinOrthoVertsProjections[anIndex];
+
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, aMaxOrthoVertsProjections)
+    OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, aMinOrthoVertsProjections)
+  }
+
+  for (Standard_Integer anIndex = 0; anIndex < 6; anIndex++)
+  {
+    const gp_Vec& anEdgeDir = myEdgeDirs[anIndex];
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &anEdgeDir)
+  }
+}
diff --git a/src/SelectMgr/SelectMgr_RectangularFrustum.cxx b/src/SelectMgr/SelectMgr_RectangularFrustum.cxx
index 6ab3470e9b..17286557ad 100644
--- a/src/SelectMgr/SelectMgr_RectangularFrustum.cxx
+++ b/src/SelectMgr/SelectMgr_RectangularFrustum.cxx
@@ -763,3 +763,20 @@ void SelectMgr_RectangularFrustum::GetPlanes (NCollection_Vector<SelectMgr_Vec4>
     thePlaneEquations.Append (anEquation);
   }
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void SelectMgr_RectangularFrustum::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_CLASS_BEGIN (theOStream, SelectMgr_RectangularFrustum)
+  OCCT_DUMP_BASE_CLASS (theOStream, theDepth, SelectMgr_Frustum)
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myNearPickedPnt)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myFarPickedPnt)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myViewRayDir)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myMousePos)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myScale)
+}
diff --git a/src/SelectMgr/SelectMgr_RectangularFrustum.hxx b/src/SelectMgr/SelectMgr_RectangularFrustum.hxx
index e5170fcccd..d2d41157b1 100644
--- a/src/SelectMgr/SelectMgr_RectangularFrustum.hxx
+++ b/src/SelectMgr/SelectMgr_RectangularFrustum.hxx
@@ -129,6 +129,9 @@ public:
   //! Ax + By + Cz + D = 0) to the given vector
   Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE;
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
+
 protected:
 
   Standard_EXPORT void segmentSegmentDistance (const gp_Pnt& theSegPnt1,
diff --git a/src/SelectMgr/SelectMgr_SelectingVolumeManager.cxx b/src/SelectMgr/SelectMgr_SelectingVolumeManager.cxx
index f6e96e25bc..3df0a5b92f 100644
--- a/src/SelectMgr/SelectMgr_SelectingVolumeManager.cxx
+++ b/src/SelectMgr/SelectMgr_SelectingVolumeManager.cxx
@@ -495,7 +495,7 @@ void SelectMgr_SelectingVolumeManager::DumpJson (Standard_OStream& theOStream, S
   for (Standard_Integer anIdx = 0; anIdx < VolumeTypesNb; ++anIdx)
   {
     const Handle(SelectMgr_BaseFrustum)& aSelectingVolume = mySelectingVolumes[anIdx];
-    OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, aSelectingVolume.get())
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aSelectingVolume.get())
   }
 
   OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myViewClipPlanes.get())
diff --git a/src/SelectMgr/SelectMgr_SelectionManager.hxx b/src/SelectMgr/SelectMgr_SelectionManager.hxx
index 7c81974652..8962efa05b 100644
--- a/src/SelectMgr/SelectMgr_SelectionManager.hxx
+++ b/src/SelectMgr/SelectMgr_SelectionManager.hxx
@@ -35,7 +35,7 @@ public:
 
   //! Return the Selector.
   const Handle(SelectMgr_ViewerSelector)& Selector() const { return mySelector; }
-  
+
   //! Returns true if the manager contains the selectable object theObject.
   Standard_EXPORT Standard_Boolean Contains (const Handle(SelectMgr_SelectableObject)& theObject) const;
   
diff --git a/src/SelectMgr/SelectMgr_TriangularFrustum.cxx b/src/SelectMgr/SelectMgr_TriangularFrustum.cxx
index 1de02a4326..e7b9aa37c4 100644
--- a/src/SelectMgr/SelectMgr_TriangularFrustum.cxx
+++ b/src/SelectMgr/SelectMgr_TriangularFrustum.cxx
@@ -302,3 +302,13 @@ void SelectMgr_TriangularFrustum::GetPlanes (NCollection_Vector<SelectMgr_Vec4>&
     thePlaneEquations.Append (aPlaneEquation);
   }
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void SelectMgr_TriangularFrustum::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_CLASS_BEGIN (theOStream, SelectMgr_TriangularFrustum)
+  OCCT_DUMP_BASE_CLASS (theOStream, theDepth, SelectMgr_Frustum)
+}
\ No newline at end of file
diff --git a/src/SelectMgr/SelectMgr_TriangularFrustum.hxx b/src/SelectMgr/SelectMgr_TriangularFrustum.hxx
index fcebf8e3a9..2a37887542 100644
--- a/src/SelectMgr/SelectMgr_TriangularFrustum.hxx
+++ b/src/SelectMgr/SelectMgr_TriangularFrustum.hxx
@@ -93,6 +93,9 @@ public:
   //! Ax + By + Cz + D = 0) to the given vector
   Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE;
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
+
 private:
 
   void cacheVertexProjections (SelectMgr_TriangularFrustum* theFrustum) const;
diff --git a/src/SelectMgr/SelectMgr_TriangularFrustumSet.cxx b/src/SelectMgr/SelectMgr_TriangularFrustumSet.cxx
index a03381e922..c7f50bf5bd 100644
--- a/src/SelectMgr/SelectMgr_TriangularFrustumSet.cxx
+++ b/src/SelectMgr/SelectMgr_TriangularFrustumSet.cxx
@@ -421,4 +421,20 @@ Standard_Boolean SelectMgr_TriangularFrustumSet::segmentTriangleIntersection (co
   return Standard_True;
 }
 
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void SelectMgr_TriangularFrustumSet::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_CLASS_BEGIN (theOStream, SelectMgr_TriangularFrustumSet)
+  OCCT_DUMP_BASE_CLASS (theOStream, theDepth, SelectMgr_BaseFrustum)
+
+  for (SelectMgr_TriangFrustumsIter anIter (myFrustums); anIter.More(); anIter.Next())
+  {
+    const Handle(SelectMgr_TriangularFrustum)& aFrustum = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aFrustum.get())
+  }
+}
+
 #undef MEMORY_BLOCK_SIZE
diff --git a/src/SelectMgr/SelectMgr_TriangularFrustumSet.hxx b/src/SelectMgr/SelectMgr_TriangularFrustumSet.hxx
index 08f4cb5b01..372dcce208 100644
--- a/src/SelectMgr/SelectMgr_TriangularFrustumSet.hxx
+++ b/src/SelectMgr/SelectMgr_TriangularFrustumSet.hxx
@@ -88,6 +88,9 @@ public:
   //! mark both included and overlapped entities as matched
   Standard_EXPORT virtual void SetAllowOverlapDetection (const Standard_Boolean theIsToAllow);
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
+
 private:
 
   //! Checks whether the segment intersects with the boundary of the current volume selection
diff --git a/src/SelectMgr/SelectMgr_ViewerSelector.cxx b/src/SelectMgr/SelectMgr_ViewerSelector.cxx
index 67e11c0074..da9b799587 100644
--- a/src/SelectMgr/SelectMgr_ViewerSelector.cxx
+++ b/src/SelectMgr/SelectMgr_ViewerSelector.cxx
@@ -1095,7 +1095,7 @@ void SelectMgr_ViewerSelector::DumpJson (Standard_OStream& theOStream, Standard_
   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myToUpdateTolerance)
   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, mystored.Extent())
 
-  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, &mySelectingVolumeMgr)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &mySelectingVolumeMgr)
   OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, &mySelectableObjects)
 
   Standard_Integer aNbOfSelectableObjects = 0;
diff --git a/src/V3d/V3d_CircularGrid.cxx b/src/V3d/V3d_CircularGrid.cxx
index ae7001af9c..99691c4552 100644
--- a/src/V3d/V3d_CircularGrid.cxx
+++ b/src/V3d/V3d_CircularGrid.cxx
@@ -361,3 +361,29 @@ void V3d_CircularGrid::SetGraphicValues (const Standard_Real theRadius, const St
   }
   if( !myCurAreDefined ) UpdateDisplay();
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void V3d_CircularGrid::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  OCCT_DUMP_BASE_CLASS(theOStream, theDepth, Aspect_CircularGrid)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myStructure.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myGroup.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myCurViewPlane)
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myViewer)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurAreDefined)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myToComputePrs)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurDrawMode)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurXo)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurYo)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurAngle)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurStep)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurDivi)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRadius)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myOffSet)
+}
diff --git a/src/V3d/V3d_CircularGrid.hxx b/src/V3d/V3d_CircularGrid.hxx
index 997b6bfecc..b18b414d37 100644
--- a/src/V3d/V3d_CircularGrid.hxx
+++ b/src/V3d/V3d_CircularGrid.hxx
@@ -50,6 +50,9 @@ public:
   Standard_EXPORT void GraphicValues (Standard_Real& Radius, Standard_Real& OffSet) const;
   
   Standard_EXPORT void SetGraphicValues (const Standard_Real Radius, const Standard_Real OffSet);
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
 
 protected:
 
diff --git a/src/V3d/V3d_RectangularGrid.cxx b/src/V3d/V3d_RectangularGrid.cxx
index 18b394aed6..cfa41e3dac 100644
--- a/src/V3d/V3d_RectangularGrid.cxx
+++ b/src/V3d/V3d_RectangularGrid.cxx
@@ -366,3 +366,30 @@ void V3d_RectangularGrid::SetGraphicValues (const Standard_Real theXSize, const
   }
   if( !myCurAreDefined ) UpdateDisplay();
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void V3d_RectangularGrid::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  OCCT_DUMP_BASE_CLASS(theOStream, theDepth, Aspect_RectangularGrid)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myStructure.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myGroup.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myCurViewPlane)
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myViewer)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurAreDefined)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myToComputePrs)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurDrawMode)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurXo)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurYo)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurAngle)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurXStep)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myCurYStep)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myXSize)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myYSize)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myOffSet)
+}
diff --git a/src/V3d/V3d_RectangularGrid.hxx b/src/V3d/V3d_RectangularGrid.hxx
index 834ef461b0..33594bb43d 100644
--- a/src/V3d/V3d_RectangularGrid.hxx
+++ b/src/V3d/V3d_RectangularGrid.hxx
@@ -49,6 +49,9 @@ public:
   Standard_EXPORT void GraphicValues (Standard_Real& XSize, Standard_Real& YSize, Standard_Real& OffSet) const;
   
   Standard_EXPORT void SetGraphicValues (const Standard_Real XSize, const Standard_Real YSize, const Standard_Real OffSet);
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
 
 protected:
   
diff --git a/src/V3d/V3d_Trihedron.cxx b/src/V3d/V3d_Trihedron.cxx
index 6d28d637d9..d5964e93ff 100644
--- a/src/V3d/V3d_Trihedron.cxx
+++ b/src/V3d/V3d_Trihedron.cxx
@@ -359,3 +359,37 @@ void V3d_Trihedron::compute()
     }
   }
 }
+
+//=======================================================================
+//function : DumpJson
+//purpose  : 
+//=======================================================================
+void V3d_Trihedron::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, mySphereShadingAspect.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, mySphereLineAspect.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myTextAspect.get())
+
+  for (Standard_Integer anIter = 0; anIter < 3; anIter++)
+  {
+    const Handle(Prs3d_ShadingAspect)& anArrowShadinAspect = myArrowShadingAspects[anIter];
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, anArrowShadinAspect.get())
+  }
+  for (Standard_Integer anIter = 0; anIter < 3; anIter++)
+  {
+    const Handle(Prs3d_LineAspect)& anArrowLineAspect = myArrowLineAspects[anIter];
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, anArrowLineAspect.get())
+  }
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myStructure.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myTransformPers.get())
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myScale)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRatio)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDiameter)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myNbFacettes)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsWireframe)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myToCompute)
+}
diff --git a/src/V3d/V3d_Trihedron.hxx b/src/V3d/V3d_Trihedron.hxx
index d609857d4f..6ac0159d12 100644
--- a/src/V3d/V3d_Trihedron.hxx
+++ b/src/V3d/V3d_Trihedron.hxx
@@ -69,6 +69,9 @@ public:
 
   //! Erase trihedron.
   Standard_EXPORT void Erase();
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 protected:
 
diff --git a/src/V3d/V3d_View.cxx b/src/V3d/V3d_View.cxx
index fd97088fc7..6fcae6fa41 100644
--- a/src/V3d/V3d_View.cxx
+++ b/src/V3d/V3d_View.cxx
@@ -3157,3 +3157,55 @@ Graphic3d_RenderingParams& V3d_View::ChangeRenderingParams()
 {
   return myView->ChangeRenderingParams();
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void V3d_View::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
+{
+  OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myOldMouseX)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myOldMouseY)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myCamStartOpUp)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myCamStartOpDir)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myCamStartOpEye)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myCamStartOpCenter)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myDefaultCamera.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myView.get())
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myImmediateUpdate)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsInvalidatedImmediate)
+  
+  OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, MyViewer)
+  for (V3d_ListOfLight::Iterator anIterator (myActiveLights); anIterator.More(); anIterator.Next())
+  {
+    class Handle(Graphic3d_CLight)& anActiveLight = anIterator.Value();
+    OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, anActiveLight)
+  }
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myDefaultViewAxis)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myDefaultViewPoint)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, MyWindow.get())
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, sx)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, sy)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, rx)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, ry)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myRotateGravity)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myComputedMode)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, SwitchSetFront)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myZRotation)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, MyZoomAtPointX)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, MyZoomAtPointY)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myTrihedron.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, MyGrid.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &MyPlane)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, MyGridEchoStructure.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, MyGridEchoGroup.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myXscreenAxis)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myYscreenAxis)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myZscreenAxis)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myViewAxis)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myGravityReferencePoint)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myAutoZFitIsOn)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myAutoZFitScaleFactor)
+}
diff --git a/src/V3d/V3d_View.hxx b/src/V3d/V3d_View.hxx
index 98af39c189..61d5d9627d 100644
--- a/src/V3d/V3d_View.hxx
+++ b/src/V3d/V3d_View.hxx
@@ -955,6 +955,9 @@ public:
   //! Returns the Objects number and the gravity center of ALL viewable points in the view
   Standard_EXPORT gp_Pnt GravityPoint() const;
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
+
   DEFINE_STANDARD_RTTIEXT(V3d_View,Standard_Transient)
 
 public: //! @name deprecated methods
@@ -1026,7 +1029,6 @@ protected:
   gp_Dir myCamStartOpUp;
   gp_Dir myCamStartOpDir;
   gp_Pnt myCamStartOpEye;
-  Standard_Real myCamStartOpBnd[6];
   gp_Pnt myCamStartOpCenter;
   Handle(Graphic3d_Camera) myDefaultCamera;
   Handle(Graphic3d_CView) myView;
diff --git a/src/V3d/V3d_Viewer.cxx b/src/V3d/V3d_Viewer.cxx
index a21cef0143..e44e2ae3a1 100644
--- a/src/V3d/V3d_Viewer.cxx
+++ b/src/V3d/V3d_Viewer.cxx
@@ -581,6 +581,60 @@ void V3d_Viewer::DisplayPrivilegedPlane (const Standard_Boolean theOnOff, const
 void V3d_Viewer::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
 {
   OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myDriver.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myStructureManager.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myZLayerGenId)
+  
+  for (V3d_ListOfView::Iterator anIter (myDefinedViews); anIter.More(); anIter.Next())
+  {
+    const Handle(V3d_View)& aDefinedView = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aDefinedView.get())
+  }
+
+  for (V3d_ListOfView::Iterator anIter (myActiveViews); anIter.More(); anIter.Next())
+  {
+    const Handle(V3d_View)& anActiveView = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, anActiveView.get())
+  }
+    
+  for (V3d_ListOfLight::Iterator anIter (myDefinedLights); anIter.More(); anIter.Next())
+  {
+    const Handle(Graphic3d_CLight)& aDefinedLight = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, aDefinedLight.get())
+  }
+
+  for (V3d_ListOfLight::Iterator anIter (myActiveLights); anIter.More(); anIter.Next())
+  {
+    const Handle(Graphic3d_CLight)& anActiveLight = anIter.Value();
+    OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, anActiveLight.get())
+  }
+
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myBackground)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myGradientBackground)
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myViewSize)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myViewProj)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myVisualization)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myShadingModel)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDefaultTypeOfView)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myDefaultRenderingParams)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myComputedMode)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDefaultComputedMode)
 
   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myPrivilegedPlane)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myPlaneStructure.get())
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDisplayPlane)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDisplayPlaneLength)
+  
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myRGrid.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myCGrid.get())
+
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myGridType)
+  OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myGridEcho)
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myGridEchoStructure.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myGridEchoGroup.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myGridEchoAspect.get())
+  OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myGridEchoLastVert)
 }
diff --git a/src/gp/gp_Vec.cxx b/src/gp/gp_Vec.cxx
index dd70d64417..5b6d0662f2 100644
--- a/src/gp/gp_Vec.cxx
+++ b/src/gp/gp_Vec.cxx
@@ -30,6 +30,7 @@
 #include <gp_XYZ.hxx>
 #include <Standard_ConstructionError.hxx>
 #include <Standard_DomainError.hxx>
+#include <Standard_Dump.hxx>
 #include <Standard_OutOfRange.hxx>
 
 Standard_Boolean gp_Vec::IsEqual
@@ -126,3 +127,12 @@ gp_Vec gp_Vec::Mirrored (const gp_Ax2& A2) const
   Vres.Mirror (A2);
   return Vres;                     
 }
+
+// =======================================================================
+// function : DumpJson
+// purpose  :
+// =======================================================================
+void gp_Vec::DumpJson (Standard_OStream& theOStream, Standard_Integer) const
+{
+  OCCT_DUMP_VECTOR_CLASS (theOStream, "gp_Vec", 3, coord.X(), coord.Y(), coord.Z())
+}
diff --git a/src/gp/gp_Vec.hxx b/src/gp/gp_Vec.hxx
index 5b17efa2ba..b537f560b0 100644
--- a/src/gp/gp_Vec.hxx
+++ b/src/gp/gp_Vec.hxx
@@ -354,6 +354,9 @@ public:
   
   //! Transforms a vector with the transformation T.
   Standard_NODISCARD gp_Vec Transformed (const gp_Trsf& T) const;
+  
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
 
 
 
diff --git a/tools/VInspector/FILES b/tools/VInspector/FILES
index 0394262f8d..85d3755710 100644
--- a/tools/VInspector/FILES
+++ b/tools/VInspector/FILES
@@ -10,6 +10,8 @@ VInspector_ItemBase.cxx
 VInspector_ItemBase.hxx
 VInspector_ItemContext.cxx
 VInspector_ItemContext.hxx
+VInspector_ItemContextProperties.cxx
+VInspector_ItemContextProperties.hxx
 VInspector_ItemHistoryElement.cxx
 VInspector_ItemHistoryElement.hxx
 VInspector_ItemHistoryRoot.cxx
@@ -19,6 +21,10 @@ VInspector_ItemHistoryType.hxx
 VInspector_ItemHistoryTypeInfo.hxx
 VInspector_ItemPresentableObject.cxx
 VInspector_ItemPresentableObject.hxx
+VInspector_ItemSelectMgrViewerSelector.cxx
+VInspector_ItemSelectMgrViewerSelector.hxx
+VInspector_ItemV3dViewer.cxx
+VInspector_ItemV3dViewer.hxx
 VInspector_ToolActionType.hxx
 VInspector_ToolBar.cxx
 VInspector_ToolBar.hxx
diff --git a/tools/VInspector/VInspector_ItemContext.cxx b/tools/VInspector/VInspector_ItemContext.cxx
index 27400ac661..7725ff7313 100644
--- a/tools/VInspector/VInspector_ItemContext.cxx
+++ b/tools/VInspector/VInspector_ItemContext.cxx
@@ -18,6 +18,7 @@
 #include <AIS.hxx>
 #include <AIS_ListOfInteractive.hxx>
 #include <SelectMgr_EntityOwner.hxx>
+#include <inspector/VInspector_ItemContextProperties.hxx>
 #include <inspector/VInspector_ItemPresentableObject.hxx>
 #include <inspector/VInspector_Tools.hxx>
 
@@ -34,6 +35,8 @@ int VInspector_ItemContext::initRowCount() const
   if (Column() != 0)
     return 0;
 
+  int aNbProperties = 1; // item to visualize Viewer information of context
+
   Handle(AIS_InteractiveContext) aContext = Handle(AIS_InteractiveContext)::DownCast (Object());
   if (aContext.IsNull())
     return 0;
@@ -49,7 +52,7 @@ int VInspector_ItemContext::initRowCount() const
     aNbPresentations++;
   }
 
-  return aNbPresentations;
+  return aNbProperties + aNbPresentations;
 }
 
 // =======================================================================
@@ -124,7 +127,10 @@ void VInspector_ItemContext::initItem() const
 // =======================================================================
 TreeModel_ItemBasePtr VInspector_ItemContext::createChild (int theRow, int theColumn)
 {
-  return VInspector_ItemPresentableObject::CreateItem (currentItem(), theRow, theColumn);
+  if (theRow == 0)
+    return VInspector_ItemContextProperties::CreateItem (currentItem(), theRow, theColumn);
+  else
+    return VInspector_ItemPresentableObject::CreateItem (currentItem(), theRow, theColumn);
 }
 
 // =======================================================================
diff --git a/tools/VInspector/VInspector_ItemContextProperties.cxx b/tools/VInspector/VInspector_ItemContextProperties.cxx
new file mode 100644
index 0000000000..020d02821c
--- /dev/null
+++ b/tools/VInspector/VInspector_ItemContextProperties.cxx
@@ -0,0 +1,68 @@
+// Created on: 2020-02-10
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#include <inspector/VInspector_ItemContextProperties.hxx>
+
+#include <inspector/VInspector_ItemContext.hxx>
+#include <inspector/VInspector_ItemV3dViewer.hxx>
+#include <inspector/VInspector_ItemSelectMgrViewerSelector.hxx>
+
+// =======================================================================
+// function : initValue
+// purpose :
+// =======================================================================
+QVariant VInspector_ItemContextProperties::initValue (int theItemRole) const
+{
+  QVariant aParentValue = VInspector_ItemBase::initValue (theItemRole);
+  if (aParentValue.isValid())
+    return aParentValue;
+
+  if (Column() != 0 || (theItemRole != Qt::DisplayRole && theItemRole != Qt::ToolTipRole))
+    return QVariant();
+
+  return "Properties";
+}
+
+// =======================================================================
+// function : initRowCount
+// purpose :
+// =======================================================================
+int VInspector_ItemContextProperties::initRowCount() const
+{
+  return 2; // V3d_Viewer, SelectMgr_ViewerSelector
+}
+
+// =======================================================================
+// function : createChild
+// purpose :
+// =======================================================================
+TreeModel_ItemBasePtr VInspector_ItemContextProperties::createChild (int theRow, int theColumn)
+{
+  if (theRow == 0)
+    return VInspector_ItemV3dViewer::CreateItem (currentItem(), theRow, theColumn);
+
+  return VInspector_ItemSelectMgrViewerSelector::CreateItem (currentItem(), theRow, theColumn);
+}
+
+// =======================================================================
+// function : initItem
+// purpose :
+// =======================================================================
+void VInspector_ItemContextProperties::initItem() const
+{
+  if (IsInitialized())
+    return;
+  const_cast<VInspector_ItemContextProperties*> (this)->Init();
+}
diff --git a/tools/VInspector/VInspector_ItemContextProperties.hxx b/tools/VInspector/VInspector_ItemContextProperties.hxx
new file mode 100644
index 0000000000..cb53b44855
--- /dev/null
+++ b/tools/VInspector/VInspector_ItemContextProperties.hxx
@@ -0,0 +1,70 @@
+// Created on: 2020-02-10
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#ifndef VInspector_ItemContextProperties_H
+#define VInspector_ItemContextProperties_H
+
+#include <Standard.hxx>
+#include <inspector/VInspector_ItemBase.hxx>
+
+#include <AIS_InteractiveObject.hxx>
+#include <TCollection_AsciiString.hxx>
+
+class VInspector_ItemContextProperties;
+typedef QExplicitlySharedDataPointer<VInspector_ItemContextProperties> VInspector_ItemContextPropertiesPtr;
+
+//! \class VInspector_ItemContextProperties
+//! Item presents additional level of information in the tree model.
+//! Parent is item context, child is v3d viewer item.
+class VInspector_ItemContextProperties : public VInspector_ItemBase
+{
+public:
+
+  //! Creates an item wrapped by a shared pointer
+  static VInspector_ItemContextPropertiesPtr CreateItem (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+  { return VInspector_ItemContextPropertiesPtr (new VInspector_ItemContextProperties (theParent, theRow, theColumn)); }
+
+  //! Destructor
+  virtual ~VInspector_ItemContextProperties() Standard_OVERRIDE {};
+
+protected:
+  //! Initializes the current item. It is empty because Reset() is also empty.
+  virtual void initItem() const Standard_OVERRIDE;
+
+  //! Returns number of item selected
+  //! \return rows count
+  virtual int initRowCount() const Standard_OVERRIDE;
+
+  //! Returns item information for the given role. Fills internal container if it was not filled yet
+  //! \param theItemRole a value role
+  //! \return the value
+  virtual QVariant initValue (const int theItemRole) const Standard_OVERRIDE;
+
+  //! Creates a child item in the given position.
+  //! \param theRow the child row position
+  //! \param theColumn the child column position
+  //! \return the created item
+  virtual TreeModel_ItemBasePtr createChild (int theRow, int theColumn) Standard_OVERRIDE;
+
+private:
+
+  //! Constructor
+  //! param theParent a parent item
+  VInspector_ItemContextProperties (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+    : VInspector_ItemBase (theParent, theRow, theColumn) {}
+
+};
+
+#endif
diff --git a/tools/VInspector/VInspector_ItemSelectMgrViewerSelector.cxx b/tools/VInspector/VInspector_ItemSelectMgrViewerSelector.cxx
new file mode 100644
index 0000000000..3846f94018
--- /dev/null
+++ b/tools/VInspector/VInspector_ItemSelectMgrViewerSelector.cxx
@@ -0,0 +1,105 @@
+// Created on: 2020-02-10
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#include <inspector/VInspector_ItemSelectMgrViewerSelector.hxx>
+
+#include <AIS.hxx>
+#include <AIS_InteractiveContext.hxx>
+#include <inspector/VInspector_ItemContext.hxx>
+#include <inspector/VInspector_ItemContextProperties.hxx>
+
+// =======================================================================
+// function : initRowCount
+// purpose :
+// =======================================================================
+int VInspector_ItemSelectMgrViewerSelector::initRowCount() const
+{
+  return 0;
+}
+
+// =======================================================================
+// function : initValue
+// purpose :
+// =======================================================================
+QVariant VInspector_ItemSelectMgrViewerSelector::initValue (const int theItemRole) const
+{
+  QVariant aParentValue = VInspector_ItemBase::initValue (theItemRole);
+  if (aParentValue.isValid())
+    return aParentValue;
+
+  if (theItemRole != Qt::DisplayRole && theItemRole != Qt::EditRole && theItemRole != Qt::ToolTipRole)
+    return QVariant();
+
+  if (GetViewerSelector().IsNull())
+    return Column() == 0 ? "Empty viewer selector" : "";
+
+  return Column() == 0 ? GetViewerSelector()->DynamicType()->Name() : QVariant();
+}
+
+// =======================================================================
+// function : Init
+// purpose :
+// =======================================================================
+void VInspector_ItemSelectMgrViewerSelector::Init()
+{
+  VInspector_ItemContextPropertiesPtr aParentItem = itemDynamicCast<VInspector_ItemContextProperties>(Parent());
+  Handle(SelectMgr_ViewerSelector) aViewerSelector;
+  if (aParentItem)
+  {
+    VInspector_ItemContextPtr aParentContextItem = itemDynamicCast<VInspector_ItemContext>(aParentItem->Parent());
+    if (aParentContextItem)
+    {
+      Handle(AIS_InteractiveContext) aContext = aParentContextItem->GetContext();
+      aViewerSelector = aContext->MainSelector();
+    }
+  }
+  myViewerSelector = aViewerSelector;
+  TreeModel_ItemBase::Init();
+}
+
+// =======================================================================
+// function : Reset
+// purpose :
+// =======================================================================
+void VInspector_ItemSelectMgrViewerSelector::Reset()
+{
+  VInspector_ItemBase::Reset();
+
+  myViewerSelector = NULL;
+}
+
+// =======================================================================
+// function : initItem
+// purpose :
+// =======================================================================
+void VInspector_ItemSelectMgrViewerSelector::initItem() const
+{
+  if (IsInitialized())
+    return;
+  const_cast<VInspector_ItemSelectMgrViewerSelector*>(this)->Init();
+}
+
+// =======================================================================
+// function : initStream
+// purpose :
+// =======================================================================
+void VInspector_ItemSelectMgrViewerSelector::initStream (Standard_OStream& theOStream) const
+{
+  Handle(SelectMgr_ViewerSelector) aViewerSelector = GetViewerSelector();
+  if (aViewerSelector.IsNull())
+    return;
+
+  aViewerSelector->DumpJson (theOStream);
+}
diff --git a/tools/VInspector/VInspector_ItemSelectMgrViewerSelector.hxx b/tools/VInspector/VInspector_ItemSelectMgrViewerSelector.hxx
new file mode 100644
index 0000000000..aa2d4c7fb3
--- /dev/null
+++ b/tools/VInspector/VInspector_ItemSelectMgrViewerSelector.hxx
@@ -0,0 +1,85 @@
+// Created on: 2020-02-10
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#ifndef VInspector_ItemSelectMgrViewerSelector_H
+#define VInspector_ItemSelectMgrViewerSelector_H
+
+#include <Standard.hxx>
+#include <inspector/VInspector_ItemBase.hxx>
+
+#include <SelectMgr_ViewerSelector.hxx>
+
+class VInspector_ItemSelectMgrViewerSelector;
+typedef QExplicitlySharedDataPointer<VInspector_ItemSelectMgrViewerSelector> VInspector_ItemSelectMgrViewerSelectorPtr;
+
+//! \class VInspector_ItemSelectMgrViewerSelector
+//! Parent item is context properties, that corresponds to SelectMgr_ViewerSelector
+class VInspector_ItemSelectMgrViewerSelector : public VInspector_ItemBase
+{
+public:
+
+  //! Creates an item wrapped by a shared pointer
+  static VInspector_ItemSelectMgrViewerSelectorPtr CreateItem (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+  { return VInspector_ItemSelectMgrViewerSelectorPtr (new VInspector_ItemSelectMgrViewerSelector (theParent, theRow, theColumn)); }
+
+  //! Destructor
+  virtual ~VInspector_ItemSelectMgrViewerSelector() Standard_OVERRIDE {};
+
+  //! Inits the item, fills internal containers
+  Standard_EXPORT virtual void Init() Standard_OVERRIDE;
+
+  //! Resets cached values
+  Standard_EXPORT virtual void Reset() Standard_OVERRIDE;
+
+  //! Returns data object of the item.
+  //! \return object
+  virtual const Handle(Standard_Transient)& Object() const { initItem(); return myViewerSelector; }
+
+  //! Returns the current viewer, init item if it was not initialized yet
+  //! \return interactive object
+  Handle(SelectMgr_ViewerSelector) GetViewerSelector() const { return Handle(SelectMgr_ViewerSelector)::DownCast (Object()); }
+
+protected:
+  //! Initializes the current item. It is empty because Reset() is also empty.
+  virtual void initItem() const Standard_OVERRIDE;
+
+  //! Returns number of displayed presentations
+  //! \return rows count
+  Standard_EXPORT virtual int initRowCount() const Standard_OVERRIDE;
+
+  //! Returns item information for the given role. Fills internal container if it was not filled yet
+  //! \param theItemRole a value role
+  //! \return the value
+  Standard_EXPORT virtual QVariant initValue (const int theItemRole) const Standard_OVERRIDE;
+
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  Standard_EXPORT virtual void initStream (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
+private:
+
+  //! Constructor
+  //! param theParent a parent item
+  //! \param theRow the item row positition in the parent item
+  //! \param theColumn the item column positition in the parent item
+  VInspector_ItemSelectMgrViewerSelector (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+    : VInspector_ItemBase(theParent, theRow, theColumn) {}
+
+protected:
+
+  Handle(SelectMgr_ViewerSelector) myViewerSelector; //!< the current viewer selector
+};
+
+#endif
diff --git a/tools/VInspector/VInspector_ItemV3dViewer.cxx b/tools/VInspector/VInspector_ItemV3dViewer.cxx
new file mode 100644
index 0000000000..17edd0c174
--- /dev/null
+++ b/tools/VInspector/VInspector_ItemV3dViewer.cxx
@@ -0,0 +1,105 @@
+// Created on: 2020-02-10
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#include <inspector/VInspector_ItemV3dViewer.hxx>
+
+#include <AIS.hxx>
+#include <AIS_InteractiveContext.hxx>
+#include <inspector/VInspector_ItemContext.hxx>
+#include <inspector/VInspector_ItemContextProperties.hxx>
+
+// =======================================================================
+// function : initRowCount
+// purpose :
+// =======================================================================
+int VInspector_ItemV3dViewer::initRowCount() const
+{
+  return 0;
+}
+
+// =======================================================================
+// function : initValue
+// purpose :
+// =======================================================================
+QVariant VInspector_ItemV3dViewer::initValue (const int theItemRole) const
+{
+  QVariant aParentValue = VInspector_ItemBase::initValue (theItemRole);
+  if (aParentValue.isValid())
+    return aParentValue;
+
+  if (theItemRole != Qt::DisplayRole && theItemRole != Qt::EditRole && theItemRole != Qt::ToolTipRole)
+    return QVariant();
+
+  if (GetViewer().IsNull())
+    return Column() == 0 ? "Empty viewer" : "";
+
+  return Column() == 0 ? GetViewer()->DynamicType()->Name() : QVariant();
+}
+
+// =======================================================================
+// function : Init
+// purpose :
+// =======================================================================
+void VInspector_ItemV3dViewer::Init()
+{
+  VInspector_ItemContextPropertiesPtr aParentItem = itemDynamicCast<VInspector_ItemContextProperties>(Parent());
+  Handle(V3d_Viewer) aViewer;
+  if (aParentItem)
+  {
+    VInspector_ItemContextPtr aParentContextItem = itemDynamicCast<VInspector_ItemContext>(aParentItem->Parent());
+    if (aParentContextItem)
+    {
+      Handle(AIS_InteractiveContext) aContext = aParentContextItem->GetContext();
+      aViewer = aContext->CurrentViewer();
+    }
+  }
+  myViewer = aViewer;
+  TreeModel_ItemBase::Init();
+}
+
+// =======================================================================
+// function : Reset
+// purpose :
+// =======================================================================
+void VInspector_ItemV3dViewer::Reset()
+{
+  VInspector_ItemBase::Reset();
+
+  myViewer = NULL;
+}
+
+// =======================================================================
+// function : initItem
+// purpose :
+// =======================================================================
+void VInspector_ItemV3dViewer::initItem() const
+{
+  if (IsInitialized())
+    return;
+  const_cast<VInspector_ItemV3dViewer*>(this)->Init();
+}
+
+// =======================================================================
+// function : initStream
+// purpose :
+// =======================================================================
+void VInspector_ItemV3dViewer::initStream (Standard_OStream& theOStream) const
+{
+  Handle(V3d_Viewer) aViewer = GetViewer();
+  if (aViewer.IsNull())
+    return;
+
+  aViewer->DumpJson (theOStream);
+}
diff --git a/tools/VInspector/VInspector_ItemV3dViewer.hxx b/tools/VInspector/VInspector_ItemV3dViewer.hxx
new file mode 100644
index 0000000000..b70c046e0c
--- /dev/null
+++ b/tools/VInspector/VInspector_ItemV3dViewer.hxx
@@ -0,0 +1,85 @@
+// Created on: 2020-02-10
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2020 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement. 
+
+#ifndef VInspector_ItemV3dViewer_H
+#define VInspector_ItemV3dViewer_H
+
+#include <Standard.hxx>
+#include <inspector/VInspector_ItemBase.hxx>
+
+#include <V3d_Viewer.hxx>
+
+class VInspector_ItemV3dViewer;
+typedef QExplicitlySharedDataPointer<VInspector_ItemV3dViewer> VInspector_ItemV3dViewerPtr;
+
+//! \class VInspector_ItemV3dViewer
+//! Parent item is context properties, that corresponds to AIS_InteractiveContext
+class VInspector_ItemV3dViewer : public VInspector_ItemBase
+{
+public:
+
+  //! Creates an item wrapped by a shared pointer
+  static VInspector_ItemV3dViewerPtr CreateItem (TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+  { return VInspector_ItemV3dViewerPtr (new VInspector_ItemV3dViewer (theParent, theRow, theColumn)); }
+
+  //! Destructor
+  virtual ~VInspector_ItemV3dViewer() Standard_OVERRIDE {};
+
+  //! Inits the item, fills internal containers
+  Standard_EXPORT virtual void Init() Standard_OVERRIDE;
+
+  //! Resets cached values
+  Standard_EXPORT virtual void Reset() Standard_OVERRIDE;
+
+  //! Returns data object of the item.
+  //! \return object
+  virtual const Handle(Standard_Transient)& Object() const { initItem(); return myViewer; }
+
+  //! Returns the current viewer, init item if it was not initialized yet
+  //! \return interactive object
+  Handle(V3d_Viewer) GetViewer() const { return Handle(V3d_Viewer)::DownCast (Object()); }
+
+protected:
+  //! Initializes the current item. It is empty because Reset() is also empty.
+  virtual void initItem() const Standard_OVERRIDE;
+
+  //! Returns number of displayed presentations
+  //! \return rows count
+  Standard_EXPORT virtual int initRowCount() const Standard_OVERRIDE;
+
+  //! Returns item information for the given role. Fills internal container if it was not filled yet
+  //! \param theItemRole a value role
+  //! \return the value
+  Standard_EXPORT virtual QVariant initValue (const int theItemRole) const Standard_OVERRIDE;
+
+  //! Returns stream value of the item to fulfill property panel.
+  //! \return stream value or dummy
+  Standard_EXPORT virtual void initStream (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
+private:
+
+  //! Constructor
+  //! param theParent a parent item
+  //! \param theRow the item row positition in the parent item
+  //! \param theColumn the item column positition in the parent item
+  VInspector_ItemV3dViewer(TreeModel_ItemBasePtr theParent, const int theRow, const int theColumn)
+    : VInspector_ItemBase(theParent, theRow, theColumn) {}
+
+protected:
+
+  Handle(V3d_Viewer) myViewer; //!< the current viewer
+};
+
+#endif