Salome HOME
Fix bug 15567: MakeFuse() for compounds of faces raises error.
[modules/geom.git] / src / GEOM_I_Superv / GEOM_Superv_i.cc
index 87263348d2fbc5be01c0a6ea13bc2952114843cb..299d9f55098785b43cfc297fefbef28c0fde426e 100644 (file)
@@ -1,8 +1,32 @@
-using namespace std;
+// Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either 
+// version 2.1 of the License.
+// 
+// This library is distributed in the hope that it will be useful 
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
 
 #include "GEOM_Superv_i.hh"
 #include "SALOME_LifeCycleCORBA.hxx"
 
+#include CORBA_SERVER_HEADER(SALOME_Session)
+#include "SALOMEDSClient_ClientFactory.hxx"
+
+#define isNewStudy(a,b) (a > 0 && a != b)
+
+using namespace std;
 //=============================================================================
 //  constructor:
 //=============================================================================
@@ -26,6 +50,7 @@ GEOM_Superv_i::GEOM_Superv_i(CORBA::ORB_ptr orb,
   setGeomEngine();
 
   myStudyID = -1;
+  myLastStudyID = -1;
 
   myBasicOp = GEOM::GEOM_IBasicOperations::_nil();
   my3DPrimOp = GEOM::GEOM_I3DPrimOperations::_nil();
@@ -75,7 +100,43 @@ void GEOM_Superv_i::setGeomEngine()
 //=============================================================================
 void GEOM_Superv_i::SetStudyID( CORBA::Long theId )
 {
-  myStudyID = theId;
+  // mkr : PAL10770 -->
+  myLastStudyID = myStudyID;
+
+  CORBA::Object_ptr anObject = name_service->Resolve("/Kernel/Session");
+  if ( !CORBA::is_nil(anObject) ) {
+    SALOME::Session_var aSession = SALOME::Session::_narrow(anObject);
+    if ( !CORBA::is_nil(aSession) ) {
+      int aStudyID = aSession->GetActiveStudyId();
+      if ( theId != aStudyID && aStudyID > 0) { // mkr : IPAL12128
+       MESSAGE("Warning : given study ID theId="<<theId<<" is wrong and will be replaced by the value "<<aStudyID);
+       myStudyID = aStudyID;
+      }
+      else
+       myStudyID = theId; // mkr : IPAL12128
+    }
+  }
+  
+  if ( isNewStudy(myLastStudyID,myStudyID) ) {
+    if (CORBA::is_nil(myGeomEngine)) setGeomEngine();
+    string anEngine = _orb->object_to_string( myGeomEngine );
+    
+    CORBA::Object_var anObj = name_service->Resolve("/myStudyManager");
+    if ( !CORBA::is_nil(anObj) ) {
+      SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(anObj);
+      if ( !CORBA::is_nil(aStudyManager) ) {
+       _PTR(Study) aDSStudy = ClientFactory::Study(aStudyManager->GetStudyByID(myStudyID));
+       if ( aDSStudy ) {
+         _PTR(SComponent) aSCO = aDSStudy->FindComponent(myGeomEngine->ComponentDataType());
+         if ( aSCO ) {
+           _PTR(StudyBuilder) aBuilder = aDSStudy->NewBuilder();
+           if ( aBuilder ) aBuilder->LoadWith( aSCO, anEngine );
+         }
+       }
+      }
+    }
+  }
+  // mkr : PAL10770 <--
 }
 
 //=============================================================================
@@ -116,7 +177,7 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::CreateListOfLong()
 //  AddItemToListOfLong:
 //=============================================================================
 void GEOM_Superv_i::AddItemToListOfLong(GEOM::GEOM_List_ptr& theList, 
-                                       long                     theObject)
+                                       CORBA::Long theObject)
 {
   MESSAGE("GEOM_Superv_i::AddItemToListOfLong(...)");
   if (GEOM_List_i<GEOM::ListOfLong>* aList = 
@@ -140,7 +201,7 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::CreateListOfDouble()
 //  AddItemToListOfDouble:
 //=============================================================================
 void GEOM_Superv_i::AddItemToListOfDouble(GEOM::GEOM_List_ptr& theList, 
-                                         double                   theObject)
+                                         CORBA::Double theObject)
 {
   MESSAGE("GEOM_Superv_i::AddItemToListOfDouble(...)");
   if (GEOM_List_i<GEOM::ListOfDouble>* aList = 
@@ -158,7 +219,8 @@ void GEOM_Superv_i::getBasicOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_IBasicOperations interface
-  myBasicOp = myGeomEngine->GetIBasicOperations(myStudyID);
+  if (CORBA::is_nil(myBasicOp) || isNewStudy(myLastStudyID,myStudyID))
+    myBasicOp = myGeomEngine->GetIBasicOperations(myStudyID);
 }
 
 //=============================================================================
@@ -169,7 +231,8 @@ void GEOM_Superv_i::get3DPrimOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_I3DPrimOperations interface
-  my3DPrimOp = myGeomEngine->GetI3DPrimOperations(myStudyID);
+  if (CORBA::is_nil(my3DPrimOp) || isNewStudy(myLastStudyID,myStudyID))
+    my3DPrimOp = myGeomEngine->GetI3DPrimOperations(myStudyID);
 }
 
 //=============================================================================
@@ -180,7 +243,8 @@ void GEOM_Superv_i::getBoolOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_IBooleanOperations interface
-  myBoolOp = myGeomEngine->GetIBooleanOperations(myStudyID);
+  if (CORBA::is_nil(myBoolOp) || isNewStudy(myLastStudyID,myStudyID))
+    myBoolOp = myGeomEngine->GetIBooleanOperations(myStudyID);
 }
 
 //=============================================================================
@@ -191,7 +255,8 @@ void GEOM_Superv_i::getInsOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_IInsertOperations interface
-  myInsOp = myGeomEngine->GetIInsertOperations(myStudyID);
+  if (CORBA::is_nil(myInsOp) || isNewStudy(myLastStudyID,myStudyID))
+    myInsOp = myGeomEngine->GetIInsertOperations(myStudyID);
 }
 
 //=============================================================================
@@ -202,7 +267,8 @@ void GEOM_Superv_i::getTransfOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_ITransformOperations interface
-  myTransfOp = myGeomEngine->GetITransformOperations(myStudyID);
+  if (CORBA::is_nil(myTransfOp) || isNewStudy(myLastStudyID,myStudyID))
+    myTransfOp = myGeomEngine->GetITransformOperations(myStudyID);
 }
 
 //=============================================================================
@@ -213,7 +279,8 @@ void GEOM_Superv_i::getShapesOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_IShapesOperations interface
-  myShapesOp = myGeomEngine->GetIShapesOperations(myStudyID);
+  if (CORBA::is_nil(myShapesOp) || isNewStudy(myLastStudyID,myStudyID))
+    myShapesOp = myGeomEngine->GetIShapesOperations(myStudyID);
 }
 
 //=============================================================================
@@ -224,7 +291,8 @@ void GEOM_Superv_i::getBlocksOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_IBlocksOperations interface
-  myBlocksOp = myGeomEngine->GetIBlocksOperations(myStudyID);
+  if (CORBA::is_nil(myBlocksOp) || isNewStudy(myLastStudyID,myStudyID))
+    myBlocksOp = myGeomEngine->GetIBlocksOperations(myStudyID);
 }
 
 //=============================================================================
@@ -235,7 +303,8 @@ void GEOM_Superv_i::getCurvesOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_ICurvesOperations interface
-  myCurvesOp = myGeomEngine->GetICurvesOperations(myStudyID);
+  if (CORBA::is_nil(myCurvesOp) || isNewStudy(myLastStudyID,myStudyID))
+    myCurvesOp = myGeomEngine->GetICurvesOperations(myStudyID);
 }
 
 //=============================================================================
@@ -246,7 +315,8 @@ void GEOM_Superv_i::getLocalOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_ILocalOperations interface
-  myLocalOp = myGeomEngine->GetILocalOperations(myStudyID);
+  if (CORBA::is_nil(myLocalOp) || isNewStudy(myLastStudyID,myStudyID))
+    myLocalOp = myGeomEngine->GetILocalOperations(myStudyID);
 }
 
 //=============================================================================
@@ -257,7 +327,8 @@ void GEOM_Superv_i::getGroupOp()
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
   // get GEOM_IGroupOperations interface
-  myGroupOp = myGeomEngine->GetIGroupOperations(myStudyID);
+  if (CORBA::is_nil(myGroupOp) || isNewStudy(myLastStudyID,myStudyID))
+    myGroupOp = myGeomEngine->GetIGroupOperations(myStudyID);
 }
 
 //=============================================================================
@@ -277,7 +348,7 @@ PortableServer::ServantBase_var GEOM_Superv_i::GetServant(CORBA::Object_ptr
 //============================================================================
 SALOMEDS::TMPFile* GEOM_Superv_i::Save(SALOMEDS::SComponent_ptr theComponent,
                                       const char* theURL,
-                                      bool isMultiFile)
+                                      CORBA::Boolean isMultiFile)
 {
   SALOMEDS::TMPFile_var aStreamFile;
   return aStreamFile._retn();
@@ -289,7 +360,7 @@ SALOMEDS::TMPFile* GEOM_Superv_i::Save(SALOMEDS::SComponent_ptr theComponent,
 //============================================================================ 
 SALOMEDS::TMPFile* GEOM_Superv_i::SaveASCII(SALOMEDS::SComponent_ptr theComponent,
                                            const char* theURL,
-                                           bool isMultiFile)
+                                           CORBA::Boolean isMultiFile)
 {
   SALOMEDS::TMPFile_var aStreamFile;
   return aStreamFile._retn();
@@ -302,7 +373,7 @@ SALOMEDS::TMPFile* GEOM_Superv_i::SaveASCII(SALOMEDS::SComponent_ptr theComponen
 CORBA::Boolean GEOM_Superv_i::Load(SALOMEDS::SComponent_ptr theComponent,
                                   const SALOMEDS::TMPFile& theStream,
                                   const char* theURL,
-                                  bool isMultiFile)
+                                  CORBA::Boolean isMultiFile)
 {
   return false;
 }
@@ -314,7 +385,7 @@ CORBA::Boolean GEOM_Superv_i::Load(SALOMEDS::SComponent_ptr theComponent,
 CORBA::Boolean GEOM_Superv_i::LoadASCII(SALOMEDS::SComponent_ptr theComponent,
                                        const SALOMEDS::TMPFile& theStream,
                                        const char* theURL,
-                                       bool isMultiFile)
+                                       CORBA::Boolean isMultiFile)
 {
   return false;
 }
@@ -324,7 +395,8 @@ CORBA::Boolean GEOM_Superv_i::LoadASCII(SALOMEDS::SComponent_ptr theComponent,
 // purpose  :
 //============================================================================
 void GEOM_Superv_i::Close(SALOMEDS::SComponent_ptr theComponent)
-{}
+{
+}
 
 //============================================================================
 // function : ComponentDataType()
@@ -365,7 +437,7 @@ char* GEOM_Superv_i::LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
 // function : CanPublishInStudy
 // purpose  : 
 //============================================================================
-bool GEOM_Superv_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
+CORBA::Boolean GEOM_Superv_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
 {
   if (CORBA::is_nil(myGeomEngine))
     setGeomEngine();
@@ -434,10 +506,13 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePointXYZ(CORBA::Double theX,
                                                  CORBA::Double theY,
                                                  CORBA::Double theZ)
 {
+  beginService( " GEOM_Superv_i::MakePointXYZ" );
   MESSAGE("GEOM_Superv_i::MakePointXYZ");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
+  getBasicOp();
   // make vertex and return
-  return myBasicOp->MakePointXYZ(theX, theY, theZ);
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePointXYZ(theX, theY, theZ);
+  endService( " GEOM_Superv_i::MakePointXYZ" );
+  return anObj;
 }
 
 //=============================================================================
@@ -448,9 +523,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePointWithReference (GEOM::GEOM_Object_p
                                                             CORBA::Double theY, 
                                                             CORBA::Double theZ)
 {
+  beginService( " GEOM_Superv_i::MakePointWithReference" );
   MESSAGE("GEOM_Superv_i::MakePointWithReference");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakePointWithReference(theReference, theX, theY, theZ);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePointWithReference(theReference, theX, theY, theZ);
+  endService( " GEOM_Superv_i::MakePointWithReference" );
+  return anObj;
 }
 
 //=============================================================================
@@ -459,9 +537,26 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePointWithReference (GEOM::GEOM_Object_p
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePointOnCurve (GEOM::GEOM_Object_ptr theRefCurve,
                                                       CORBA::Double theParameter)
 {
+  beginService( " GEOM_Superv_i::MakePointOnCurve" );
   MESSAGE("GEOM_Superv_i::MakePointOnCurve");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakePointOnCurve(theRefCurve, theParameter);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePointOnCurve(theRefCurve, theParameter);
+  endService( " GEOM_Superv_i::MakePointOnCurve" );
+  return anObj;
+}
+
+//=============================================================================
+//  MakeTangentOnCurve:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeTangentOnCurve (GEOM::GEOM_Object_ptr theRefCurve,
+                                                        CORBA::Double theParameter)
+{
+  beginService( " GEOM_Superv_i::MakeTangentOnCurve" );
+  MESSAGE("GEOM_Superv_i::MakeTangentOnCurve");
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakeTangentOnCurve(theRefCurve, theParameter);
+  endService( " GEOM_Superv_i::MakeTangentOnCurve" );
+  return anObj;
 }
 
 //=============================================================================
@@ -471,9 +566,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeVectorDXDYDZ (CORBA::Double theDX,
                                                       CORBA::Double theDY,
                                                       CORBA::Double theDZ)
 {
+  beginService( " GEOM_Superv_i::MakeVectorDXDYDZ" );
   MESSAGE("GEOM_Superv_i::MakeVectorDXDYDZ");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakeVectorDXDYDZ(theDX, theDY, theDZ);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakeVectorDXDYDZ(theDX, theDY, theDZ);
+  endService( " GEOM_Superv_i::MakeVectorDXDYDZ" );
+  return anObj;
 }
 
 //=============================================================================
@@ -482,9 +580,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeVectorDXDYDZ (CORBA::Double theDX,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeVectorTwoPnt (GEOM::GEOM_Object_ptr thePnt1,
                                                       GEOM::GEOM_Object_ptr thePnt2)
 {
+  beginService( " GEOM_Superv_i::MakeVectorTwoPnt" );
   MESSAGE("GEOM_Superv_i::MakeVector");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakeVectorTwoPnt(thePnt1, thePnt2);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakeVectorTwoPnt(thePnt1, thePnt2);
+  endService( " GEOM_Superv_i::MakeVectorTwoPnt" );
+  return anObj;
 }
 
 //=============================================================================
@@ -493,9 +594,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeVectorTwoPnt (GEOM::GEOM_Object_ptr the
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeLineTwoPnt (GEOM::GEOM_Object_ptr thePnt1,
                                                     GEOM::GEOM_Object_ptr thePnt2)
 {
+  beginService( " GEOM_Superv_i::MakeLineTwoPnt");
   MESSAGE("GEOM_Superv_i::MakeLineTwoPnt");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakeLineTwoPnt(thePnt1, thePnt2);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakeLineTwoPnt(thePnt1, thePnt2);
+  endService( " GEOM_Superv_i::MakeLineTwoPnt");
+  return anObj;
 }
 
 //=============================================================================
@@ -506,9 +610,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePlaneThreePnt (GEOM::GEOM_Object_ptr th
                                                        GEOM::GEOM_Object_ptr thePnt3,
                                                        CORBA::Double theTrimSize)
 {
+  beginService( " GEOM_Superv_i::MakePlaneThreePnt");
   MESSAGE("GEOM_Superv_i::MakePlaneThreePnt");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakePlaneThreePnt(thePnt1, thePnt2, thePnt3, theTrimSize);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePlaneThreePnt(thePnt1, thePnt2, thePnt3, theTrimSize);
+  endService( " GEOM_Superv_i::MakePlaneThreePnt");
+  return anObj;
 }
 
 //=============================================================================
@@ -517,10 +624,13 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePlaneThreePnt (GEOM::GEOM_Object_ptr th
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePlanePntVec (GEOM::GEOM_Object_ptr thePnt,
                                                      GEOM::GEOM_Object_ptr theVec,
                                                      CORBA::Double theTrimSize)
-{
+{ 
+  beginService( " GEOM_Superv_i::MakePlanePntVec" );
   MESSAGE("GEOM_Superv_i::MakePlanePntVec");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakePlanePntVec(thePnt, theVec, theTrimSize);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePlanePntVec(thePnt, theVec, theTrimSize);
+  endService( " GEOM_Superv_i::MakePlanePntVec" );
+  return anObj;
 }
 
 //=============================================================================
@@ -529,9 +639,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePlanePntVec (GEOM::GEOM_Object_ptr theP
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePlaneFace (GEOM::GEOM_Object_ptr theFace,
                                                    CORBA::Double theTrimSize)
 {
+  beginService( " GEOM_Superv_i::MakePlaneFace" );
   MESSAGE("GEOM_Superv_i::MakePlaneFace");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakePlaneFace(theFace, theTrimSize);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePlaneFace(theFace, theTrimSize);
+  endService( " GEOM_Superv_i::MakePlaneFace" );
+  return anObj;
 }
 
 //=============================================================================
@@ -542,9 +655,28 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeMarker
  CORBA::Double theXDX, CORBA::Double theXDY, CORBA::Double theXDZ,
  CORBA::Double theYDX, CORBA::Double theYDY, CORBA::Double theYDZ)
 {
+  beginService( " GEOM_Superv_i::MakeMarker" );
   MESSAGE("GEOM_Superv_i::MakeMarker");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  return myBasicOp->MakeMarker(theOX, theOY, theOZ, theXDX, theXDY, theXDZ, theYDX, theYDY, theYDZ);
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakeMarker(theOX, theOY, theOZ, theXDX, theXDY, theXDZ, theYDX, theYDY, theYDZ);
+  endService( " GEOM_Superv_i::MakeMarker" );
+  return anObj;
+}
+
+//=============================================================================
+//  MakeTangentPlaneOnFace:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeTangentPlaneOnFace (GEOM::GEOM_Object_ptr theFace, 
+                                                CORBA::Double theParameterU,
+                                                CORBA::Double theParameterV,
+                                                CORBA::Double theTrimSize)
+{
+  beginService( " GEOM_Superv_i::MakeTangentPlaneOnFace" );
+  MESSAGE("GEOM_Superv_i::MakeTangentPlaneOnFace");
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakeTangentPlaneOnFace(theFace, theParameterU,theParameterV,theTrimSize);
+  endService( " GEOM_Superv_i::MakeTangentPlaneOnFace" );
+  return anObj;
 }
 
 //================= Primitives Construction : 3DPrimOperations ================
@@ -558,11 +690,14 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeBox (CORBA::Double theX1,
                                              CORBA::Double theY2,
                                              CORBA::Double theZ2)
 {
+  beginService( " GEOM_Superv_i::MakeBox" );
   MESSAGE("GEOM_Superv_i::MakeBox");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeBoxTwoPnt(myBasicOp->MakePointXYZ(theX1, theY1, theZ1),
-                                  myBasicOp->MakePointXYZ(theX2, theY2, theZ2));
+  getBasicOp();
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeBoxTwoPnt(myBasicOp->MakePointXYZ(theX1, theY1, theZ1),
+                                                         myBasicOp->MakePointXYZ(theX2, theY2, theZ2));
+  endService( " GEOM_Superv_i::MakeBox" );
+  return anObj;
 }
 
 //=============================================================================
@@ -572,9 +707,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeBoxDXDYDZ (CORBA::Double theDX,
                                                    CORBA::Double theDY, 
                                                    CORBA::Double theDZ)
 {
+  beginService( " GEOM_Superv_i::MakeBoxDXDYDZ" );
   MESSAGE("GEOM_Superv_i::MakeBoxDXDYDZ");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeBoxDXDYDZ(theDX, theDY, theDZ);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeBoxDXDYDZ(theDX, theDY, theDZ);
+  endService( " GEOM_Superv_i::MakeBoxDXDYDZ" );
+  return anObj;
 }
 
 //=============================================================================
@@ -583,9 +721,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeBoxDXDYDZ (CORBA::Double theDX,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeBoxTwoPnt (GEOM::GEOM_Object_ptr thePnt1, 
                                                    GEOM::GEOM_Object_ptr thePnt2)
 {
+  beginService( " GEOM_Superv_i::MakeBoxTwoPnt" );
   MESSAGE("GEOM_Superv_i::MakeBoxTwoPnt");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeBoxTwoPnt(thePnt1, thePnt2);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeBoxTwoPnt(thePnt1, thePnt2);
+  endService( " GEOM_Superv_i::MakeBoxTwoPnt" );
+  return anObj;
 }
 
 //=============================================================================
@@ -596,9 +737,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr
                                                           CORBA::Double theRadius,
                                                           CORBA::Double theHeight)
 {
+  beginService( " GEOM_Superv_i::MakeCylinderPntVecRH" );
   MESSAGE("GEOM_Superv_i::MakeCylinderPntVecRH");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeCylinderPntVecRH(thePnt, theAxis, theRadius, theHeight); 
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderPntVecRH(thePnt, theAxis, theRadius, theHeight);
+  endService( " GEOM_Superv_i::MakeCylinderPntVecRH" );
+  return anObj;
 }
 
 //=============================================================================
@@ -607,9 +751,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderPntVecRH (GEOM::GEOM_Object_ptr
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCylinderRH (CORBA::Double theR, 
                                                     CORBA::Double theH)
 {
+  beginService( " GEOM_Superv_i::MakeCylinderRH" );
   MESSAGE("GEOM_Superv_i::MakeCylinderRH");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeCylinderRH(theR, theH); 
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeCylinderRH(theR, theH);
+  endService( " GEOM_Superv_i::MakeCylinderRH" );
+  return anObj; 
 }
 
 //=============================================================================
@@ -620,10 +767,13 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSphere  (CORBA::Double theX,
                                                  CORBA::Double theZ,
                                                  CORBA::Double theRadius)
 {
+  beginService( " GEOM_Superv_i::MakeSphepe" );
   MESSAGE("GEOM_Superv_i::MakeSphepe");
-  if (CORBA::is_nil(myBasicOp)) getBasicOp();
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeSpherePntR(myBasicOp->MakePointXYZ(theX, theY, theZ), theRadius);
+  getBasicOp();
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeSpherePntR(myBasicOp->MakePointXYZ(theX, theY, theZ), theRadius);
+  endService( " GEOM_Superv_i::MakeSphepe" );
+  return anObj;
 }
 
 //=============================================================================
@@ -631,9 +781,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSphere  (CORBA::Double theX,
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSphereR (CORBA::Double theR)
 {
+  beginService( " GEOM_Superv_i::MakeSphereR" );
   MESSAGE("GEOM_Superv_i::MakeSphereR");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeSphereR(theR);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeSphereR(theR);
+  endService( " GEOM_Superv_i::MakeSphereR" );
+  return anObj;
 }
 
 //=============================================================================
@@ -642,9 +795,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSphereR (CORBA::Double theR)
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSpherePntR (GEOM::GEOM_Object_ptr thePnt, 
                                                     CORBA::Double theR)
 {
+  beginService( " GEOM_Superv_i::MakeSpherePntR" );
   MESSAGE("GEOM_Superv_i::MakeSpherePntR");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeSpherePntR(thePnt, theR);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeSpherePntR(thePnt, theR);
+  endService( " GEOM_Superv_i::MakeSpherePntR" );
+  return anObj;
 }
 
 //=============================================================================
@@ -655,9 +811,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeTorusPntVecRR (GEOM::GEOM_Object_ptr th
                                                        CORBA::Double theRMajor,
                                                        CORBA::Double theRMinor)
 {
+  beginService( " GEOM_Superv_i::MakeTorusPntVecRR" );
   MESSAGE("GEOM_Superv_i::MakeTorusPntVecRR");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeTorusPntVecRR(thePnt, theVec, theRMajor, theRMinor);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeTorusPntVecRR(thePnt, theVec, theRMajor, theRMinor);
+  endService( " GEOM_Superv_i::MakeTorusPntVecRR" );
+  return anObj;
 }
 
 //=============================================================================
@@ -666,9 +825,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeTorusPntVecRR (GEOM::GEOM_Object_ptr th
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeTorusRR (CORBA::Double theRMajor,
                                                  CORBA::Double theRMinor)
 {
+  beginService( " GEOM_Superv_i::MakeTorusRR" );
   MESSAGE("GEOM_Superv_i::MakeTorusRR");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeTorusRR(theRMajor, theRMinor);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeTorusRR(theRMajor, theRMinor);
+  endService( " GEOM_Superv_i::MakeTorusRR" );
+  return anObj;
 }
 
 //=============================================================================
@@ -680,9 +842,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeConePntVecR1R2H (GEOM::GEOM_Object_ptr
                                                          CORBA::Double theR2,
                                                          CORBA::Double theHeight)
 {
+  beginService( " GEOM_Superv_i::MakeConePntVecR1R2H" );
   MESSAGE("GEOM_Superv_i::MakeConePntVecR1R2H");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeConePntVecR1R2H(thePnt, theAxis, theR1, theR2, theHeight);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeConePntVecR1R2H(thePnt, theAxis, theR1, theR2, theHeight);
+  endService( " GEOM_Superv_i::MakeConePntVecR1R2H" );
+  return anObj;
 }
 
 //=============================================================================
@@ -692,9 +857,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeConeR1R2H (CORBA::Double theR1,
                                                    CORBA::Double theR2, 
                                                    CORBA::Double theHeight)
 {
+  beginService( " GEOM_Superv_i::MakeConeR1R2H" );
   MESSAGE("GEOM_Superv_i::MakeConeR1R2H");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeConeR1R2H(theR1, theR2, theHeight);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeConeR1R2H(theR1, theR2, theHeight);
+  endService( " GEOM_Superv_i::MakeConeR1R2H" );
+  return anObj;
 }
 
 //=============================================================================
@@ -704,9 +872,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismVecH (GEOM::GEOM_Object_ptr theBas
                                                    GEOM::GEOM_Object_ptr theVec,
                                                    CORBA::Double         theH)
 {
+  beginService( " GEOM_Superv_i::MakePrismVecH" );
   MESSAGE("GEOM_Superv_i::MakePrismVecH");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakePrismVecH(theBase, theVec, theH);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePrismVecH(theBase, theVec, theH);
+  endService( " GEOM_Superv_i::MakePrismVecH" );
+  return anObj;
 }
 
 
@@ -717,9 +888,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismTwoPnt (GEOM::GEOM_Object_ptr theB
                                                      GEOM::GEOM_Object_ptr thePoint1,
                                                      GEOM::GEOM_Object_ptr thePoint2)
 {
+  beginService( " GEOM_Superv_i::MakePrismTwoPnt" );
   MESSAGE("GEOM_Superv_i::MakePrismTwoPnt");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakePrismTwoPnt(theBase, thePoint1, thePoint2);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePrismTwoPnt(theBase, thePoint1, thePoint2);
+  endService( " GEOM_Superv_i::MakePrismTwoPnt" );
+  return anObj;
 }
 
 //=============================================================================
@@ -728,9 +902,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismTwoPnt (GEOM::GEOM_Object_ptr theB
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipe (GEOM::GEOM_Object_ptr theBase, 
                                               GEOM::GEOM_Object_ptr thePath)
 {
+  beginService( " GEOM_Superv_i::MakePipe" );
   MESSAGE("GEOM_Superv_i::MakePipe");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakePipe(theBase, thePath);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePipe(theBase, thePath);
+  endService( " GEOM_Superv_i::MakePipe" );
+  return anObj;
 }
 
 //=============================================================================
@@ -740,9 +917,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeRevolutionAxisAngle (GEOM::GEOM_Object_
                                                              GEOM::GEOM_Object_ptr theAxis,
                                                              CORBA::Double theAngle)
 {
+  beginService( " GEOM_Superv_i::MakeRevolutionAxisAngle" );
   MESSAGE("GEOM_Superv_i::MakeRevolutionAxisAngle");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeRevolutionAxisAngle(theBase, theAxis, theAngle);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeRevolutionAxisAngle(theBase, theAxis, theAngle);
+  endService( " GEOM_Superv_i::MakeRevolutionAxisAngle" );
+  return anObj;
 }
 
 //=============================================================================
@@ -753,9 +933,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilling (GEOM::GEOM_Object_ptr theShape
                                                  CORBA::Double theTol2D, CORBA::Double theTol3D,
                                                  CORBA::Long theNbIter)
 {
+  beginService( " GEOM_Superv_i::MakeFilling" );
   MESSAGE("GEOM_Superv_i::MakeFilling");
-  if (CORBA::is_nil(my3DPrimOp)) get3DPrimOp();
-  return my3DPrimOp->MakeFilling(theShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter);
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeFilling(theShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter);
+  endService( " GEOM_Superv_i::MakeFilling" );
+  return anObj;
 }
 
 //============================= BooleanOperations =============================
@@ -766,22 +949,86 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeBoolean (GEOM::GEOM_Object_ptr theShape
                                                  GEOM::GEOM_Object_ptr theShape2,
                                                  CORBA::Long theOperation)
 {
+  beginService( " GEOM_Superv_i::MakeBoolean" );
   // theOperation indicates the operation to be done:
   // 1 - Common, 2 - Cut, 3 - Fuse, 4 - Section
   MESSAGE("GEOM_Superv_i::MakeBoolean");
-  if (CORBA::is_nil(myBoolOp)) getBoolOp();
-  return myBoolOp->MakeBoolean(theShape1, theShape2, theOperation);
+  getBoolOp();
+  GEOM::GEOM_Object_ptr anObj = myBoolOp->MakeBoolean(theShape1, theShape2, theOperation);
+  endService( " GEOM_Superv_i::MakeBoolean" );
+  return anObj;
+}
+
+//=============================================================================
+//  MakeThruSections:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
+                                        CORBA::Boolean theModeSolid,
+                                        CORBA::Double thePreci,
+                                        CORBA::Boolean theRuled)
+{
+  beginService( " GEOM_Superv_i::MakeThruSections" );
+  MESSAGE("GEOM_Superv_i::MakeThruSections");
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeThruSections(theSeqSections, theModeSolid,thePreci,theRuled);
+  endService( " GEOM_Superv_i::MakeThruSections" );
+  return anObj;
+}
+
+//=============================================================================
+//  MakePipe:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeWithDifferentSections
+                     (const GEOM::ListOfGO& theBases,
+                     const GEOM::ListOfGO& theLocations,
+                     GEOM::GEOM_Object_ptr thePath,
+                     CORBA::Boolean theWithContact,
+                     CORBA::Boolean theWithCorrections)
+{
+  beginService( " GEOM_Superv_i::MakePipeWithDifferentSections" );
+  MESSAGE("GEOM_Superv_i::MakePipeWithDifferentSections");
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePipeWithDifferentSections(theBases,theLocations, thePath,theWithContact,theWithCorrections);
+  endService( " GEOM_Superv_i::MakePipeWithDifferentSections" );
+  return anObj;
+}
+
+
+//=============================================================================
+//  MakePipe:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeWithShellSections
+                   (const GEOM::ListOfGO& theBases,
+                   const GEOM::ListOfGO& theSubBases,
+                   const GEOM::ListOfGO& theLocations,
+                   GEOM::GEOM_Object_ptr thePath,
+                   CORBA::Boolean theWithContact,
+                   CORBA::Boolean theWithCorrections)
+{
+  beginService( " GEOM_Superv_i::MakePipeWithShellSections" );
+  MESSAGE("GEOM_Superv_i::MakePipeWithShellSections");
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj =
+    my3DPrimOp->MakePipeWithShellSections(theBases, theSubBases,
+                                         theLocations, thePath,
+                                         theWithContact, theWithCorrections);
+  endService( " GEOM_Superv_i::MakePipeWithShellSections" );
+  return anObj;
 }
 
+
 //=============================================================================
 //  MakeFuse:
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFuse (GEOM::GEOM_Object_ptr theShape1,
                                               GEOM::GEOM_Object_ptr theShape2)
 {
+  beginService( " GEOM_Superv_i::MakeFuse" );
   MESSAGE("GEOM_Superv_i::MakeFuse");
-  if (CORBA::is_nil(myBoolOp)) getBoolOp();
-  return myBoolOp->MakeBoolean(theShape1, theShape2, 3);
+  getBoolOp();
+  GEOM::GEOM_Object_ptr anObj = myBoolOp->MakeBoolean(theShape1, theShape2, 3);
+  endService( " GEOM_Superv_i::MakeFuse" );
+  return anObj;
 }
 
 //=============================================================================
@@ -791,10 +1038,11 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePartition (GEOM::GEOM_List_ptr   theSha
                                                    GEOM::GEOM_List_ptr   theTools,
                                                    GEOM::GEOM_List_ptr   theKeepInside,
                                                    GEOM::GEOM_List_ptr   theRemoveInside,
-                                                   const CORBA::Short      theLimit,
-                                                   const CORBA::Boolean    theRemoveWebs,
+                                                   CORBA::Short      theLimit,
+                                                   CORBA::Boolean    theRemoveWebs,
                                                    GEOM::GEOM_List_ptr theMaterials)
 {
+  beginService( " GEOM_Superv_i::MakePartition" );
   MESSAGE("GEOM_Superv_i::MakePartition");
   GEOM_List_i<GEOM::ListOfGO>* aListImplS = 
     dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theShapes, myPOA).in());
@@ -807,11 +1055,14 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePartition (GEOM::GEOM_List_ptr   theSha
   GEOM_List_i<GEOM::ListOfLong>* aListImplM = 
     dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theMaterials, myPOA).in());
   if (aListImplS && aListImplT && aListImplKI && aListImplRI && aListImplM) {
-    if (CORBA::is_nil(myBoolOp)) getBoolOp();
-    return myBoolOp->MakePartition(aListImplS->GetList(), aListImplT->GetList(), 
-                                  aListImplKI->GetList(), aListImplRI->GetList(),
-                                  theLimit, theRemoveWebs, aListImplM->GetList());
+    getBoolOp();
+    GEOM::GEOM_Object_ptr anObj = myBoolOp->MakePartition(aListImplS->GetList(), aListImplT->GetList(), 
+                                                         aListImplKI->GetList(), aListImplRI->GetList(),
+                                                         theLimit, theRemoveWebs, aListImplM->GetList());
+    endService( " GEOM_Superv_i::MakePartition" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakePartition" );
   return NULL;
 }
 
@@ -821,9 +1072,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePartition (GEOM::GEOM_List_ptr   theSha
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeHalfPartition (GEOM::GEOM_Object_ptr theShape,
                                                        GEOM::GEOM_Object_ptr thePlane)
 {
+  beginService( " GEOM_Superv_i::MakeHalfPartition" );
   MESSAGE("GEOM_Superv_i::MakeHalfPartition");
-  if (CORBA::is_nil(myBoolOp)) getBoolOp();
-  return myBoolOp->MakeHalfPartition(theShape, thePlane);
+  getBoolOp();
+  GEOM::GEOM_Object_ptr anObj = myBoolOp->MakeHalfPartition(theShape, thePlane);
+  endService( " GEOM_Superv_i::MakeHalfPartition" );
+  return anObj;
 }
 
 //============================== InsertOperations =============================
@@ -832,9 +1086,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeHalfPartition (GEOM::GEOM_Object_ptr th
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCopy (GEOM::GEOM_Object_ptr theOriginal)
 {
+  beginService( " GEOM_Superv_i::MakeCopy" );
   MESSAGE("GEOM_Superv_i::MakeCopy");
-  if (CORBA::is_nil(myInsOp)) getInsOp();
-  return myInsOp->MakeCopy(theOriginal);
+  getInsOp();
+  GEOM::GEOM_Object_ptr anObj = myInsOp->MakeCopy(theOriginal);
+  endService( " GEOM_Superv_i::MakeCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -844,9 +1101,11 @@ void GEOM_Superv_i::Export (GEOM::GEOM_Object_ptr theObject,
                            const char*           theFileName, 
                            const char*           theFormatName)
 {
+  beginService( " GEOM_Superv_i::Export" );
   MESSAGE("GEOM_Superv_i::Export");
-  if (CORBA::is_nil(myInsOp)) getInsOp();
+  getInsOp();
   myInsOp->Export(theObject, theFileName, theFormatName);
+  endService( " GEOM_Superv_i::Export" );
 }
 
 //=============================================================================
@@ -855,9 +1114,12 @@ void GEOM_Superv_i::Export (GEOM::GEOM_Object_ptr theObject,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::Import (const char* theFileName, 
                                             const char* theFormatName)
 {
+  beginService( " GEOM_Superv_i::Import" );
   MESSAGE("GEOM_Superv_i::Import");
-  if (CORBA::is_nil(myInsOp)) getInsOp();
-  return myInsOp->Import(theFileName, theFormatName);
+  getInsOp();
+  GEOM::GEOM_Object_ptr anObj = myInsOp->Import(theFileName, theFormatName);
+  endService( " GEOM_Superv_i::Import" );
+  return anObj;
 }
 
 //=============================================================================
@@ -866,9 +1128,11 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::Import (const char* theFileName,
 void GEOM_Superv_i::ImportTranslators (GEOM::string_array_out theFormats,
                                       GEOM::string_array_out thePatterns)
 {
+  beginService( " GEOM_Superv_i::ImportTranslators" );
   MESSAGE("GEOM_Superv_i::ImportTranslators");
-  if (CORBA::is_nil(myInsOp)) getInsOp();
+  getInsOp();
   myInsOp->ImportTranslators(theFormats, thePatterns);
+  endService( " GEOM_Superv_i::ImportTranslators" );
 }
 
 //=============================================================================
@@ -877,9 +1141,11 @@ void GEOM_Superv_i::ImportTranslators (GEOM::string_array_out theFormats,
 void GEOM_Superv_i::ExportTranslators (GEOM::string_array_out theFormats,
                                       GEOM::string_array_out thePatterns)
 {
+  beginService( " GEOM_Superv_i::ExportTranslators" );
   MESSAGE("GEOM_Superv_i::ExportTranslators");
-  if (CORBA::is_nil(myInsOp)) getInsOp();
+  getInsOp();
   myInsOp->ExportTranslators(theFormats, thePatterns);
+  endService( " GEOM_Superv_i::ExportTranslators" );
 }
 
 //============================= TransformOperations ===========================
@@ -890,9 +1156,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::TranslateTwoPoints (GEOM::GEOM_Object_ptr t
                                                         GEOM::GEOM_Object_ptr thePoint1,
                                                         GEOM::GEOM_Object_ptr thePoint2)
 {
+  beginService( " GEOM_Superv_i::TranslateTwoPoints" );
   MESSAGE("GEOM_Superv_i::TranslateTwoPoints");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->TranslateTwoPoints(theObject, thePoint1, thePoint2);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->TranslateTwoPoints(theObject, thePoint1, thePoint2);
+  endService( " GEOM_Superv_i::TranslateTwoPoints" );
+  return anObj;
 }
 
 //=============================================================================
@@ -902,9 +1171,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::TranslateTwoPointsCopy (GEOM::GEOM_Object_p
                                                             GEOM::GEOM_Object_ptr thePoint1,
                                                             GEOM::GEOM_Object_ptr thePoint2)
 {
+  beginService( " GEOM_Superv_i::TranslateTwoPointsCopy" );
   MESSAGE("GEOM_Superv_i::TranslateTwoPointsCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->TranslateTwoPointsCopy(theObject, thePoint1, thePoint2);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->TranslateTwoPointsCopy(theObject, thePoint1, thePoint2);
+  endService( " GEOM_Superv_i::TranslateTwoPointsCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -915,9 +1187,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::TranslateDXDYDZ (GEOM::GEOM_Object_ptr theO
                                                      CORBA::Double theDY, 
                                                      CORBA::Double theDZ)
 {
+  beginService( " GEOM_Superv_i::TranslateDXDYDZ" );
   MESSAGE("GEOM_Superv_i::TranslateDXDYDZ");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->TranslateDXDYDZ(theObject, theDX, theDY, theDZ);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->TranslateDXDYDZ(theObject, theDX, theDY, theDZ);
+  endService( " GEOM_Superv_i::TranslateDXDYDZ" );
+  return anObj;
 }
 
 //=============================================================================
@@ -928,9 +1203,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::TranslateDXDYDZCopy (GEOM::GEOM_Object_ptr
                                                          CORBA::Double theDY, 
                                                          CORBA::Double theDZ)
 {
+  beginService( " GEOM_Superv_i::TranslateDXDYDZCopy" );
   MESSAGE("GEOM_Superv_i::TranslateDXDYDZCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->TranslateDXDYDZCopy(theObject, theDX, theDY, theDZ);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->TranslateDXDYDZCopy(theObject, theDX, theDY, theDZ);
+  endService( " GEOM_Superv_i::TranslateDXDYDZCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -939,9 +1217,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::TranslateDXDYDZCopy (GEOM::GEOM_Object_ptr
 GEOM::GEOM_Object_ptr GEOM_Superv_i::TranslateVector (GEOM::GEOM_Object_ptr theObject,
                                                      GEOM::GEOM_Object_ptr theVector)
 {
+  beginService( " GEOM_Superv_i::TranslateVector" );
   MESSAGE("GEOM_Superv_i::TranslateVector");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->TranslateVector(theObject, theVector);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->TranslateVector(theObject, theVector);
+  endService( " GEOM_Superv_i::TranslateVector" );
+  return anObj;
 }
 
 //=============================================================================
@@ -950,9 +1231,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::TranslateVector (GEOM::GEOM_Object_ptr theO
 GEOM::GEOM_Object_ptr GEOM_Superv_i::TranslateVectorCopy (GEOM::GEOM_Object_ptr theObject,
                                                          GEOM::GEOM_Object_ptr theVector)
 {
+  beginService( " GEOM_Superv_i::TranslateVectorCopy" );
   MESSAGE("GEOM_Superv_i::TranslateVectorCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->TranslateVectorCopy(theObject, theVector);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->TranslateVectorCopy(theObject, theVector);
+  endService( " GEOM_Superv_i::TranslateVectorCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -963,9 +1247,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MultiTranslate1D (GEOM::GEOM_Object_ptr the
                                                       CORBA::Double theStep,
                                                       CORBA::Long theNbTimes)
 {
+  beginService( " GEOM_Superv_i::MultiTranslate1D" );
   MESSAGE("GEOM_Superv_i::MultiTranslate1D");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MultiTranslate1D(theObject, theVector, theStep, theNbTimes);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MultiTranslate1D(theObject, theVector, theStep, theNbTimes);
+  endService( " GEOM_Superv_i::MultiTranslate1D" );
+  return anObj;
 }
 
 //=============================================================================
@@ -979,10 +1266,13 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MultiTranslate2D (GEOM::GEOM_Object_ptr the
                                                       CORBA::Double theStep2,
                                                       CORBA::Long theNbTimes2)
 {
+  beginService( " GEOM_Superv_i::MultiTranslate2D" );
   MESSAGE("GEOM_Superv_i::MultiTranslate2D");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MultiTranslate2D(theObject, theVector1, theStep1, theNbTimes1,
-                                     theVector2, theStep2, theNbTimes2);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MultiTranslate2D(theObject, theVector1, theStep1, theNbTimes1,
+                                                            theVector2, theStep2, theNbTimes2);
+  endService( " GEOM_Superv_i::MultiTranslate2D" );
+  return anObj;
 }
 
 //=============================================================================
@@ -992,9 +1282,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::Rotate (GEOM::GEOM_Object_ptr theObject,
                                             GEOM::GEOM_Object_ptr theAxis,
                                             CORBA::Double theAngle)
 {
+  beginService( " GEOM_Superv_i::Rotate" );
   MESSAGE("GEOM_Superv_i::Rotate");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->Rotate(theObject, theAxis, theAngle);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->Rotate(theObject, theAxis, theAngle);
+  endService( " GEOM_Superv_i::Rotate" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1004,9 +1297,43 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::RotateCopy (GEOM::GEOM_Object_ptr theObject
                                                 GEOM::GEOM_Object_ptr theAxis,
                                                 CORBA::Double theAngle)
 {
+  beginService( " GEOM_Superv_i::RotateCopy" );
   MESSAGE("GEOM_Superv_i::RotateCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->RotateCopy(theObject, theAxis, theAngle);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->RotateCopy(theObject, theAxis, theAngle);
+  endService( " GEOM_Superv_i::RotateCopy" );
+  return anObj;
+}
+//=============================================================================
+//  RotateThreePoints:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::RotateThreePoints (GEOM::GEOM_Object_ptr theObject,
+                                                       GEOM::GEOM_Object_ptr theCentPoint,
+                                                       GEOM::GEOM_Object_ptr thePoint1,
+                                                       GEOM::GEOM_Object_ptr thePoint2)
+{
+  beginService( " GEOM_Superv_i::RotateThreePoints" );
+  MESSAGE("GEOM_Superv_i::RotateThreePoints");
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->RotateThreePoints(theObject, theCentPoint, thePoint1, thePoint2);
+  endService( " GEOM_Superv_i::RotateThreePoints" );
+  return anObj;
+}
+
+//=============================================================================
+//  RotateThreePointsCopy:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::RotateThreePointsCopy (GEOM::GEOM_Object_ptr theObject,
+                                                           GEOM::GEOM_Object_ptr theCentPoint,
+                                                           GEOM::GEOM_Object_ptr thePoint1,
+                                                           GEOM::GEOM_Object_ptr thePoint2)
+{
+  beginService( " GEOM_Superv_i::RotateThreePointsCopy" );
+  MESSAGE("GEOM_Superv_i::RotateThreePointsCopy");
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->RotateThreePointsCopy(theObject, theCentPoint, thePoint1, thePoint2);
+  endService( " GEOM_Superv_i::RotateThreePointsCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1016,9 +1343,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MultiRotate1D (GEOM::GEOM_Object_ptr theObj
                                                    GEOM::GEOM_Object_ptr theAxis,
                                                    CORBA::Long theNbTimes)
 {
+  beginService( " GEOM_Superv_i::MultiRotate1D" );
   MESSAGE("GEOM_Superv_i::MultiRotate1D");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MultiRotate1D(theObject, theAxis, theNbTimes);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MultiRotate1D(theObject, theAxis, theNbTimes);
+  endService( " GEOM_Superv_i::MultiRotate1D" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1031,9 +1361,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MultiRotate2D (GEOM::GEOM_Object_ptr theObj
                                                    CORBA::Double theStep,
                                                    CORBA::Long theNbTimes2)
 {
+  beginService( " GEOM_Superv_i::MultiRotate2D" );
   MESSAGE("GEOM_Superv_i::MultiRotate2D");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MultiRotate2D(theObject, theAxis, theAngle, theNbTimes1, theStep, theNbTimes2);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MultiRotate2D(theObject, theAxis, theAngle, theNbTimes1, theStep, theNbTimes2);
+  endService( " GEOM_Superv_i::MultiRotate2D" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1042,9 +1375,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MultiRotate2D (GEOM::GEOM_Object_ptr theObj
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorPlane (GEOM::GEOM_Object_ptr theObject, 
                                                  GEOM::GEOM_Object_ptr thePlane)
 {
+  beginService( " GEOM_Superv_i::MirrorPlane" );
   MESSAGE("GEOM_Superv_i::MirrorPlane");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MirrorPlane(theObject, thePlane);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MirrorPlane(theObject, thePlane);
+  endService( " GEOM_Superv_i::MirrorPlane" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1053,9 +1389,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorPlane (GEOM::GEOM_Object_ptr theObjec
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorPlaneCopy (GEOM::GEOM_Object_ptr theObject, 
                                                      GEOM::GEOM_Object_ptr thePlane)
 {
+  beginService( " GEOM_Superv_i::MirrorPlaneCopy" );
   MESSAGE("GEOM_Superv_i::MirrorPlaneCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MirrorPlaneCopy(theObject, thePlane);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MirrorPlaneCopy(theObject, thePlane);
+  endService( " GEOM_Superv_i::MirrorPlaneCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1064,9 +1403,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorPlaneCopy (GEOM::GEOM_Object_ptr theO
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorAxis (GEOM::GEOM_Object_ptr theObject, 
                                                 GEOM::GEOM_Object_ptr theAxis)
 {
+  beginService( " GEOM_Superv_i::MirrorAxis" );
   MESSAGE("GEOM_Superv_i::MirrorAxis");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MirrorAxis(theObject, theAxis);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MirrorAxis(theObject, theAxis);
+  endService( " GEOM_Superv_i::MirrorAxis" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1075,9 +1417,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorAxis (GEOM::GEOM_Object_ptr theObject
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorAxisCopy (GEOM::GEOM_Object_ptr theObject, 
                                                     GEOM::GEOM_Object_ptr theAxis)
 {
+  beginService( " GEOM_Superv_i::MirrorAxisCopy" );
   MESSAGE("GEOM_Superv_i::MirrorAxisCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MirrorAxisCopy(theObject, theAxis);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MirrorAxisCopy(theObject, theAxis);
+  endService( " GEOM_Superv_i::MirrorAxisCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1086,9 +1431,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorAxisCopy (GEOM::GEOM_Object_ptr theOb
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorPoint (GEOM::GEOM_Object_ptr theObject, 
                                                  GEOM::GEOM_Object_ptr thePoint)
 {
+  beginService( " GEOM_Superv_i::MirrorPoint" );
   MESSAGE("GEOM_Superv_i::MirrorPoint");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MirrorPoint(theObject, thePoint);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MirrorPoint(theObject, thePoint);
+  endService( " GEOM_Superv_i::MirrorPoint" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1097,9 +1445,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorPoint (GEOM::GEOM_Object_ptr theObjec
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorPointCopy (GEOM::GEOM_Object_ptr theObject, 
                                                      GEOM::GEOM_Object_ptr thePoint)
 {
+  beginService( " GEOM_Superv_i::MirrorPoint" );
   MESSAGE("GEOM_Superv_i::MirrorPointCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->MirrorPointCopy(theObject, thePoint);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->MirrorPointCopy(theObject, thePoint);
+  endService( " GEOM_Superv_i::MirrorPoint" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1108,9 +1459,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MirrorPointCopy (GEOM::GEOM_Object_ptr theO
 GEOM::GEOM_Object_ptr GEOM_Superv_i::OffsetShape (GEOM::GEOM_Object_ptr theObject, 
                                                  CORBA::Double theOffset)
 {
+  beginService( " GEOM_Superv_i::OffsetShape" );
   MESSAGE("GEOM_Superv_i::OffsetShape");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->OffsetShape(theObject, theOffset);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->OffsetShape(theObject, theOffset);
+  endService( " GEOM_Superv_i::OffsetShape" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1119,9 +1473,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::OffsetShape (GEOM::GEOM_Object_ptr theObjec
 GEOM::GEOM_Object_ptr GEOM_Superv_i::OffsetShapeCopy (GEOM::GEOM_Object_ptr theObject, 
                                                      CORBA::Double theOffset)
 {
+  beginService( " GEOM_Superv_i::OffsetShapeCopy" );
   MESSAGE("GEOM_Superv_i::OffsetShapeCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->OffsetShapeCopy(theObject, theOffset);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->OffsetShapeCopy(theObject, theOffset);
+  endService( " GEOM_Superv_i::OffsetShapeCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1131,9 +1488,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::ScaleShape (GEOM::GEOM_Object_ptr theObject
                                                 GEOM::GEOM_Object_ptr thePoint,
                                                 CORBA::Double theFactor)
 {
+  beginService( " GEOM_Superv_i::ScaleShape" );
   MESSAGE("GEOM_Superv_i::ScaleShape");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->ScaleShape(theObject, thePoint, theFactor);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->ScaleShape(theObject, thePoint, theFactor);
+  endService( " GEOM_Superv_i::ScaleShape" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1143,9 +1503,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::ScaleShapeCopy (GEOM::GEOM_Object_ptr theOb
                                                     GEOM::GEOM_Object_ptr thePoint,
                                                     CORBA::Double theFactor)
 {
+  beginService( " GEOM_Superv_i::ScaleShapeCopy" );
   MESSAGE("GEOM_Superv_i::ScaleShapeCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->ScaleShapeCopy(theObject, thePoint, theFactor);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->ScaleShapeCopy(theObject, thePoint, theFactor);
+  endService( " GEOM_Superv_i::ScaleShapeCopy" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1155,9 +1518,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::PositionShape (GEOM::GEOM_Object_ptr theObj
                                                    GEOM::GEOM_Object_ptr theStartLCS,
                                                    GEOM::GEOM_Object_ptr theEndLCS)
 {
+  beginService( " GEOM_Superv_i::PositionShape" );
   MESSAGE("GEOM_Superv_i::PositionShape");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->PositionShape(theObject, theStartLCS, theEndLCS);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->PositionShape(theObject, theStartLCS, theEndLCS);
+  endService( " GEOM_Superv_i::PositionShape" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1167,9 +1533,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::PositionShapeCopy (GEOM::GEOM_Object_ptr th
                                                        GEOM::GEOM_Object_ptr theStartLCS,
                                                        GEOM::GEOM_Object_ptr theEndLCS)
 {
+  beginService( " GEOM_Superv_i::PositionShapeCopy" );
   MESSAGE("GEOM_Superv_i::PositionShapeCopy");
-  if (CORBA::is_nil(myTransfOp)) getTransfOp();
-  return myTransfOp->PositionShapeCopy(theObject, theStartLCS, theEndLCS);
+  getTransfOp();
+  GEOM::GEOM_Object_ptr anObj = myTransfOp->PositionShapeCopy(theObject, theStartLCS, theEndLCS);
+  endService( " GEOM_Superv_i::PositionShapeCopy" );
+  return anObj;
 }
 
 //=============================== ShapesOperations ============================
@@ -1179,9 +1548,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::PositionShapeCopy (GEOM::GEOM_Object_ptr th
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeEdge (GEOM::GEOM_Object_ptr thePnt1,
                                               GEOM::GEOM_Object_ptr thePnt2)
 {
+  beginService( " GEOM_Superv_i::MakeEdge" );
   MESSAGE("GEOM_Superv_i::MakeEdge");
-  if (CORBA::is_nil(myShapesOp)) getShapesOp();
-  return myShapesOp->MakeEdge(thePnt1, thePnt2);
+  getShapesOp();
+  GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeEdge(thePnt1, thePnt2);
+  endService( " GEOM_Superv_i::MakeEdge" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1189,12 +1561,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeEdge (GEOM::GEOM_Object_ptr thePnt1,
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeWire (GEOM::GEOM_List_ptr theEdgesAndWires)
 {
+  beginService( " GEOM_Superv_i::MakeWire" );
   MESSAGE("GEOM_Superv_i::MakeWire");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplEW = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theEdgesAndWires, myPOA).in())) {
-    if (CORBA::is_nil(myShapesOp)) getShapesOp();
-    return myShapesOp->MakeWire(aListImplEW->GetList());
+    getShapesOp();
+    GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeWire(aListImplEW->GetList());
+    endService( " GEOM_Superv_i::MakeWire" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeWire" );
   return NULL;
 }
 
@@ -1204,9 +1580,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeWire (GEOM::GEOM_List_ptr theEdgesAndWi
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFace (GEOM::GEOM_Object_ptr theWire,
                                               CORBA::Boolean isPlanarWanted)
 {
+  beginService( " GEOM_Superv_i::MakeFace" );
   MESSAGE("GEOM_Superv_i::MakeFace");
-  if (CORBA::is_nil(myShapesOp)) getShapesOp();
-  return myShapesOp->MakeFace(theWire, isPlanarWanted);
+  getShapesOp();
+  GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeFace(theWire, isPlanarWanted);
+  endService( " GEOM_Superv_i::MakeFace" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1215,12 +1594,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFace (GEOM::GEOM_Object_ptr theWire,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFaceWires (GEOM::GEOM_List_ptr theWires,
                                                    CORBA::Boolean isPlanarWanted)
 {
+  beginService( " GEOM_Superv_i::MakeFaceWires" );
   MESSAGE("GEOM_Superv_i::MakeFaceWires");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplW = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theWires, myPOA).in())) {
-    if (CORBA::is_nil(myShapesOp)) getShapesOp();
-    return myShapesOp->MakeFaceWires(aListImplW->GetList(), isPlanarWanted);
+    getShapesOp();
+    GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeFaceWires(aListImplW->GetList(), isPlanarWanted);
+    endService( " GEOM_Superv_i::MakeFaceWires" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeFaceWires" );
   return NULL;
 }
 
@@ -1229,12 +1612,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFaceWires (GEOM::GEOM_List_ptr theWires
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeShell (GEOM::GEOM_List_ptr theFacesAndShells)
 {
+  beginService( " GEOM_Superv_i::MakeShell" );
   MESSAGE("GEOM_Superv_i::MakeShell");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplFS = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theFacesAndShells, myPOA).in())) {
-    if (CORBA::is_nil(myShapesOp)) getShapesOp();
-    return myShapesOp->MakeShell(aListImplFS->GetList());
+    getShapesOp();
+    GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeShell(aListImplFS->GetList());
+    endService( " GEOM_Superv_i::MakeShell" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeShell" );
   return NULL;
 }
 
@@ -1243,9 +1630,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeShell (GEOM::GEOM_List_ptr theFacesAndS
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSolidShell (GEOM::GEOM_Object_ptr theShell)
 {
+  beginService( " GEOM_Superv_i::MakeSolidShell" );
   MESSAGE("GEOM_Superv_i::MakeSolidShell");
-  if (CORBA::is_nil(myShapesOp)) getShapesOp();
-  return myShapesOp->MakeSolidShell(theShell);
+  getShapesOp();
+  GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeSolidShell(theShell);
+  endService( " GEOM_Superv_i::MakeSolidShell" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1253,12 +1643,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSolidShell (GEOM::GEOM_Object_ptr theSh
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSolidShells (GEOM::GEOM_List_ptr theShells)
 {
+  beginService( " GEOM_Superv_i::MakeSolidShells" );
   MESSAGE("GEOM_Superv_i::MakeSolidShells");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplS = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theShells, myPOA).in())) {
-    if (CORBA::is_nil(myShapesOp)) getShapesOp();
-    return myShapesOp->MakeSolidShells(aListImplS->GetList());
+    getShapesOp();
+    GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeSolidShells(aListImplS->GetList());
+    endService( " GEOM_Superv_i::MakeSolidShells" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeSolidShells" );
   return NULL;
 }
 
@@ -1267,12 +1661,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSolidShells (GEOM::GEOM_List_ptr theShe
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCompound (GEOM::GEOM_List_ptr theShapes)
 {
+  beginService( " GEOM_Superv_i::MakeCompound" );
   MESSAGE("GEOM_Superv_i::MakeCompound");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImpl = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theShapes, myPOA).in())) {
-    if (CORBA::is_nil(myShapesOp)) getShapesOp();
-    return myShapesOp->MakeCompound(aListImpl->GetList());
+    getShapesOp();
+    GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeCompound(aListImpl->GetList());
+    endService( " GEOM_Superv_i::MakeCompound" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeCompound" );
   return NULL;
 }
 
@@ -1280,26 +1678,62 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCompound (GEOM::GEOM_List_ptr theShapes
 //  MakeGlueFaces:
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeGlueFaces (GEOM::GEOM_Object_ptr theShape,
-                                                   const CORBA::Double   theTolerance)
+                                                   CORBA::Double   theTolerance)
 {
+  beginService( " GEOM_Superv_i::MakeGlueFaces" );
   MESSAGE("GEOM_Superv_i::MakeGlueFaces");
-  if (CORBA::is_nil(myShapesOp)) getShapesOp();
-  return myShapesOp->MakeGlueFaces(theShape, theTolerance);
+  getShapesOp();
+  GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeGlueFaces(theShape, theTolerance);
+  endService( " GEOM_Superv_i::MakeGlueFaces" );
+  return anObj;
+}
+
+//=============================================================================
+//  GetGlueFaces:
+//=============================================================================
+GEOM::GEOM_List_ptr GEOM_Superv_i::GetGlueFaces (GEOM::GEOM_Object_ptr theShape,
+                                                CORBA::Double theTolerance)
+{
+  beginService( " GEOM_Superv_i::GetGlueFaces" );
+  MESSAGE("GEOM_Superv_i::GetGlueFaces");
+  getShapesOp();
+  GEOM::ListOfGO* aList = myShapesOp->GetGlueFaces(theShape, theTolerance);
+  GEOM_List_i<GEOM::ListOfGO>* aListPtr = new GEOM_List_i<GEOM::ListOfGO>(*(aList));
+  MESSAGE(" List of "<<aListPtr->GetList().length()<<" element(s)");
+  endService( " GEOM_Superv_i::GetGlueFaces" );
+  return aListPtr->_this();
+}
+
+//=============================================================================
+//  MakeGlueFacesByList:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeGlueFacesByList (GEOM::GEOM_Object_ptr theShape,
+                                                         CORBA::Double theTolerance,
+                                                         const GEOM::ListOfGO& theFaces)
+{
+  beginService( " GEOM_Superv_i::MakeGlueFacesByList" );
+  MESSAGE("GEOM_Superv_i::MakeGlueFacesByList");
+  getShapesOp();
+  GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeGlueFacesByList(theShape, theTolerance, theFaces);
+  endService( " GEOM_Superv_i::MakeGlueFacesByList" );
+  return anObj;
 }
 
 //=============================================================================
 //  MakeExplode:
 //=============================================================================
 GEOM::GEOM_List_ptr GEOM_Superv_i::MakeExplode (GEOM::GEOM_Object_ptr theShape,
-                                                   const CORBA::Long theShapeType,
-                                                   const CORBA::Boolean isSorted)
+                                                   CORBA::Long theShapeType,
+                                                   CORBA::Boolean isSorted)
 {
+  beginService( " GEOM_Superv_i::MakeExplode" );
   MESSAGE("GEOM_Superv_i::MakeExplode");
-  if (CORBA::is_nil(myShapesOp)) getShapesOp();
+  getShapesOp();
 
   GEOM::ListOfGO* aList = myShapesOp->MakeExplode(theShape, theShapeType, isSorted);
   GEOM_List_i<GEOM::ListOfGO>* aListPtr = new GEOM_List_i<GEOM::ListOfGO>(*(aList));
   MESSAGE(" List of "<<aListPtr->GetList().length()<<" element(s)");
+  endService( " GEOM_Superv_i::MakeExplode" );
   return aListPtr->_this();
 }
 
@@ -1308,9 +1742,12 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::MakeExplode (GEOM::GEOM_Object_ptr theShape,
 //=============================================================================
 CORBA::Long GEOM_Superv_i::NumberOfFaces (GEOM::GEOM_Object_ptr theShape)
 {
+  beginService( " GEOM_Superv_i::NumberOfFaces" );
   MESSAGE("GEOM_Superv_i::NumberOfFaces");
-  if (CORBA::is_nil(myShapesOp)) getShapesOp();
-  return myShapesOp->NumberOfFaces(theShape);
+  getShapesOp();
+  CORBA::Long aRes = myShapesOp->NumberOfFaces(theShape);
+  endService( " GEOM_Superv_i::NumberOfFaces" );
+  return aRes;
 }
 
 //=============================================================================
@@ -1318,9 +1755,12 @@ CORBA::Long GEOM_Superv_i::NumberOfFaces (GEOM::GEOM_Object_ptr theShape)
 //=============================================================================
 CORBA::Long GEOM_Superv_i::NumberOfEdges (GEOM::GEOM_Object_ptr theShape)
 {
+  beginService( " GEOM_Superv_i::NumberOfEdges" );
   MESSAGE("GEOM_Superv_i::NumberOfEdges");
-  if (CORBA::is_nil(myShapesOp)) getShapesOp();
-  return myShapesOp->NumberOfEdges(theShape);
+  getShapesOp();
+  CORBA::Long aRes = myShapesOp->NumberOfEdges(theShape);
+  endService( " GEOM_Superv_i::NumberOfEdges" );
+  return aRes;
 }
 
 //=============================================================================
@@ -1328,9 +1768,12 @@ CORBA::Long GEOM_Superv_i::NumberOfEdges (GEOM::GEOM_Object_ptr theShape)
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::ChangeOrientation (GEOM::GEOM_Object_ptr theShape)
 {
+  beginService( " GEOM_Superv_i::ChangeOrientation" );
   MESSAGE("GEOM_Superv_i::ChangeOrientation");
-  if (CORBA::is_nil(myShapesOp)) getShapesOp();
-  return myShapesOp->ChangeOrientation(theShape);
+  getShapesOp();
+  GEOM::GEOM_Object_ptr anObj = myShapesOp->ChangeOrientation(theShape);
+  endService( " GEOM_Superv_i::ChangeOrientation" );
+  return anObj;
 }
 
 
@@ -1343,9 +1786,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeQuad4Vertices (GEOM::GEOM_Object_ptr th
                                                        GEOM::GEOM_Object_ptr thePnt3,
                                                        GEOM::GEOM_Object_ptr thePnt4)
 {
+  beginService( " GEOM_Superv_i::MakeQuad4Vertices" );
   MESSAGE("GEOM_Superv_i::MakeQuad4Vertices");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->MakeQuad4Vertices(thePnt1, thePnt2, thePnt3, thePnt4);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->MakeQuad4Vertices(thePnt1, thePnt2, thePnt3, thePnt4);
+  endService( " GEOM_Superv_i::MakeQuad4Vertices" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1356,9 +1802,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeQuad (GEOM::GEOM_Object_ptr theEdge1,
                                               GEOM::GEOM_Object_ptr theEdge3,
                                               GEOM::GEOM_Object_ptr theEdge4)
 {
+  beginService( " GEOM_Superv_i::MakeQuad" );
   MESSAGE("GEOM_Superv_i::MakeQuad");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->MakeQuad(theEdge1, theEdge2, theEdge3, theEdge4);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->MakeQuad(theEdge1, theEdge2, theEdge3, theEdge4);
+  endService( " GEOM_Superv_i::MakeQuad" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1367,9 +1816,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeQuad (GEOM::GEOM_Object_ptr theEdge1,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeQuad2Edges (GEOM::GEOM_Object_ptr theEdge1,
                                                     GEOM::GEOM_Object_ptr theEdge2)
 {
+  beginService( " GEOM_Superv_i::MakeQuad2Edges" );
   MESSAGE("GEOM_Superv_i::MakeQuad2Edges");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->MakeQuad2Edges(theEdge1, theEdge2);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->MakeQuad2Edges(theEdge1, theEdge2);
+  endService( " GEOM_Superv_i::MakeQuad2Edges" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1382,9 +1834,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeHexa (GEOM::GEOM_Object_ptr theFace1,
                                               GEOM::GEOM_Object_ptr theFace5,
                                               GEOM::GEOM_Object_ptr theFace6)
 {
+  beginService( " GEOM_Superv_i::MakeHexa" );
   MESSAGE("GEOM_Superv_i::MakeHexa");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->MakeHexa(theFace1, theFace2, theFace3, theFace4, theFace5, theFace6);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->MakeHexa(theFace1, theFace2, theFace3, theFace4, theFace5, theFace6);
+  endService( " GEOM_Superv_i::MakeHexa" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1393,23 +1848,29 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeHexa (GEOM::GEOM_Object_ptr theFace1,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeHexa2Faces (GEOM::GEOM_Object_ptr theFace1,
                                                     GEOM::GEOM_Object_ptr theFace2)
 {
+  beginService( " GEOM_Superv_i::MakeHexa2Faces" );
   MESSAGE("GEOM_Superv_i::MakeHexa2Faces");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->MakeHexa2Faces(theFace1, theFace2);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->MakeHexa2Faces(theFace1, theFace2);
+  endService( " GEOM_Superv_i::MakeHexa2Faces" );
+  return anObj;
 }
 
 //=============================================================================
 //  GetPoint:
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::GetPoint (GEOM::GEOM_Object_ptr theShape,
-                                              const CORBA::Double   theX,
-                                              const CORBA::Double   theY,
-                                              const CORBA::Double   theZ,
-                                              const CORBA::Double   theEpsilon)
+                                              CORBA::Double   theX,
+                                              CORBA::Double   theY,
+                                              CORBA::Double   theZ,
+                                              CORBA::Double   theEpsilon)
 {
+  beginService( " GEOM_Superv_i::GetPoint" );
   MESSAGE("GEOM_Superv_i::GetPoint");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetPoint(theShape, theX, theY, theZ, theEpsilon);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetPoint(theShape, theX, theY, theZ, theEpsilon);
+  endService( " GEOM_Superv_i::GetPoint" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1419,9 +1880,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetEdge (GEOM::GEOM_Object_ptr theShape,
                                              GEOM::GEOM_Object_ptr thePoint1,
                                              GEOM::GEOM_Object_ptr thePoint2)
 {
+  beginService( " GEOM_Superv_i::GetEdge" );
   MESSAGE("GEOM_Superv_i::GetEdge");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetEdge(theShape, thePoint1, thePoint2);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetEdge(theShape, thePoint1, thePoint2);
+  endService( " GEOM_Superv_i::GetEdge" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1430,9 +1894,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetEdge (GEOM::GEOM_Object_ptr theShape,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::GetEdgeNearPoint (GEOM::GEOM_Object_ptr theShape,
                                                       GEOM::GEOM_Object_ptr thePoint)
 {
+  beginService( " GEOM_Superv_i::GetEdgeNearPoint" );
   MESSAGE("GEOM_Superv_i::GetEdgeNearPoint");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetEdgeNearPoint(theShape, thePoint);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetEdgeNearPoint(theShape, thePoint);
+  endService( " GEOM_Superv_i::GetEdgeNearPoint" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1444,9 +1911,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetFaceByPoints (GEOM::GEOM_Object_ptr theS
                                                      GEOM::GEOM_Object_ptr thePoint3,
                                                      GEOM::GEOM_Object_ptr thePoint4)
 {
+  beginService( " GEOM_Superv_i::GetFaceByPoints" );
   MESSAGE("GEOM_Superv_i::GetFaceByPoints");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetFaceByPoints(theShape, thePoint1, thePoint2, thePoint3, thePoint4);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetFaceByPoints(theShape, thePoint1, thePoint2, thePoint3, thePoint4);
+  endService( " GEOM_Superv_i::GetFaceByPoints" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1456,9 +1926,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetFaceByEdges (GEOM::GEOM_Object_ptr theSh
                                                     GEOM::GEOM_Object_ptr theEdge1,
                                                     GEOM::GEOM_Object_ptr theEdge2)
 {
+  beginService( " GEOM_Superv_i::GetFaceByEdges" );
   MESSAGE("GEOM_Superv_i::GetFaceByEdges");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetFaceByEdges(theShape, theEdge1, theEdge2);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetFaceByEdges(theShape, theEdge1, theEdge2);
+  endService( " GEOM_Superv_i::GetFaceByEdges" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1467,9 +1940,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetFaceByEdges (GEOM::GEOM_Object_ptr theSh
 GEOM::GEOM_Object_ptr GEOM_Superv_i::GetOppositeFace (GEOM::GEOM_Object_ptr theBlock,
                                                      GEOM::GEOM_Object_ptr theFace)
 {
+  beginService( " GEOM_Superv_i::GetOppositeFace" );
   MESSAGE("GEOM_Superv_i::GetOppositeFace");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetOppositeFace(theBlock, theFace);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetOppositeFace(theBlock, theFace);
+  endService( " GEOM_Superv_i::GetOppositeFace" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1478,9 +1954,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetOppositeFace (GEOM::GEOM_Object_ptr theB
 GEOM::GEOM_Object_ptr GEOM_Superv_i::GetFaceNearPoint (GEOM::GEOM_Object_ptr theShape,
                                                       GEOM::GEOM_Object_ptr thePoint)
 {
+  beginService( " GEOM_Superv_i::GetFaceNearPoint" );
   MESSAGE("GEOM_Superv_i::GetFaceNearPoint");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetFaceNearPoint(theShape, thePoint);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetFaceNearPoint(theShape, thePoint);
+  endService( " GEOM_Superv_i::GetFaceNearPoint" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1489,22 +1968,28 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetFaceNearPoint (GEOM::GEOM_Object_ptr the
 GEOM::GEOM_Object_ptr GEOM_Superv_i::GetFaceByNormale (GEOM::GEOM_Object_ptr theBlock,
                                                       GEOM::GEOM_Object_ptr theVector)
 {
+  beginService( " GEOM_Superv_i::GetFaceByNormale" );
   MESSAGE("GEOM_Superv_i::GetFaceByNormale");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetFaceByNormale(theBlock, theVector);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetFaceByNormale(theBlock, theVector);
+  endService( " GEOM_Superv_i::GetFaceByNormale" );
+  return anObj;
 }
 
 //=============================================================================
 //  IsCompoundOfBlocks:
 //=============================================================================
 CORBA::Boolean GEOM_Superv_i::IsCompoundOfBlocks (GEOM::GEOM_Object_ptr theCompound,
-                                                 const CORBA::Long     theMinNbFaces,
-                                                 const CORBA::Long     theMaxNbFaces,
+                                                 CORBA::Long     theMinNbFaces,
+                                                 CORBA::Long     theMaxNbFaces,
                                                  CORBA::Long&          theNbBlocks)
 {
+  beginService( " GEOM_Superv_i::IsCompoundOfBlocks" );
   MESSAGE("GEOM_Superv_i::IsCompoundOfBlocks");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->IsCompoundOfBlocks(theCompound, theMinNbFaces, theMaxNbFaces, theNbBlocks);
+  getBlocksOp();
+  CORBA::Boolean aRes = myBlocksOp->IsCompoundOfBlocks(theCompound, theMinNbFaces, theMaxNbFaces, theNbBlocks);
+  endService( " GEOM_Superv_i::IsCompoundOfBlocks" );
+  return aRes;
 }
 
 //=============================================================================
@@ -1514,9 +1999,12 @@ CORBA::Boolean GEOM_Superv_i::CheckCompoundOfBlocks
 (GEOM::GEOM_Object_ptr theCompound,
  GEOM::GEOM_IBlocksOperations::BCErrors_out theErrors)
 {
+  beginService( " GEOM_Superv_i::CheckCompoundOfBlocks" );
   MESSAGE("GEOM_Superv_i::CheckCompoundOfBlocks");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->CheckCompoundOfBlocks(theCompound, theErrors);
+  getBlocksOp();
+  CORBA::Boolean aRes = myBlocksOp->CheckCompoundOfBlocks(theCompound, theErrors);
+  endService( " GEOM_Superv_i::CheckCompoundOfBlocks" );
+  return aRes;
 }
 
 //=============================================================================
@@ -1525,22 +2013,27 @@ CORBA::Boolean GEOM_Superv_i::CheckCompoundOfBlocks
 char* GEOM_Superv_i::PrintBCErrors (GEOM::GEOM_Object_ptr theCompound,
                                    const GEOM::GEOM_IBlocksOperations::BCErrors& theErrors)
 {
+  beginService( " GEOM_Superv_i::PrintBCErrors" );
   MESSAGE("GEOM_Superv_i::PrintBCErrors");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->PrintBCErrors(theCompound, theErrors);
+  getBlocksOp();
+  char* anErrors = myBlocksOp->PrintBCErrors(theCompound, theErrors);
+  endService( " GEOM_Superv_i::PrintBCErrors" );
+  return anErrors;
 }
 
 //=============================================================================
 //  ExplodeCompoundOfBlocks:
 //=============================================================================
 GEOM::GEOM_List_ptr GEOM_Superv_i::ExplodeCompoundOfBlocks (GEOM::GEOM_Object_ptr theCompound,
-                                                               const CORBA::Long     theMinNbFaces,
-                                                               const CORBA::Long     theMaxNbFaces)
+                                                               CORBA::Long     theMinNbFaces,
+                                                               CORBA::Long     theMaxNbFaces)
 {
+  beginService( " GEOM_Superv_i::ExplodeCompoundOfBlocks" );
   MESSAGE("GEOM_Superv_i::ExplodeCompoundOfBlocks");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
+  getBlocksOp();
   GEOM::ListOfGO* aBlocks = myBlocksOp->ExplodeCompoundOfBlocks(theCompound, theMinNbFaces, theMaxNbFaces);
   GEOM_List_i<GEOM::ListOfGO>* aListPtr = new GEOM_List_i<GEOM::ListOfGO>(*(aBlocks));
+  endService( " GEOM_Superv_i::ExplodeCompoundOfBlocks" );
   return aListPtr->_this();
 }
 
@@ -1550,9 +2043,12 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::ExplodeCompoundOfBlocks (GEOM::GEOM_Object_pt
 GEOM::GEOM_Object_ptr GEOM_Superv_i::GetBlockNearPoint (GEOM::GEOM_Object_ptr theCompound,
                                                        GEOM::GEOM_Object_ptr thePoint)
 {
+  beginService( " GEOM_Superv_i::GetBlockNearPoint" );
   MESSAGE("GEOM_Superv_i::GetBlockNearPoint");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->GetBlockNearPoint(theCompound, thePoint);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetBlockNearPoint(theCompound, thePoint);
+  endService( " GEOM_Superv_i::GetBlockNearPoint" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1561,12 +2057,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetBlockNearPoint (GEOM::GEOM_Object_ptr th
 GEOM::GEOM_Object_ptr GEOM_Superv_i::GetBlockByParts (GEOM::GEOM_Object_ptr theCompound,
                                                      GEOM::GEOM_List_ptr theParts)
 {
+  beginService( " GEOM_Superv_i::GetBlockByParts" );
   MESSAGE("GEOM_Superv_i::GetBlockByParts");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplP = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theParts, myPOA).in())) {
-    if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-    return myBlocksOp->GetBlockByParts(theCompound, aListImplP->GetList());
+    getBlocksOp();
+    GEOM::GEOM_Object_ptr anObj = myBlocksOp->GetBlockByParts(theCompound, aListImplP->GetList());
+    endService( " GEOM_Superv_i::GetBlockByParts" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::GetBlockByParts" );
   return NULL;
 }
 
@@ -1576,15 +2076,18 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetBlockByParts (GEOM::GEOM_Object_ptr theC
 GEOM::GEOM_List_ptr GEOM_Superv_i::GetBlocksByParts (GEOM::GEOM_Object_ptr theCompound,
                                                         GEOM::GEOM_List_ptr theParts)
 {
+  beginService( " GEOM_Superv_i::GetBlocksByParts" );
   MESSAGE("GEOM_Superv_i::GetBlocksByParts");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplP = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theParts, myPOA).in())) {
-    if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
+    getBlocksOp();
     
     GEOM::ListOfGO* aBlocks = myBlocksOp->GetBlocksByParts(theCompound, aListImplP->GetList());
     GEOM_List_i<GEOM::ListOfGO>* aListPtr = new GEOM_List_i<GEOM::ListOfGO>(*(aBlocks));
+    endService( " GEOM_Superv_i::GetBlocksByParts" );
     return aListPtr->_this();
   }
+  endService( " GEOM_Superv_i::GetBlocksByParts" );
   return NULL;
 }
 
@@ -1592,13 +2095,16 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::GetBlocksByParts (GEOM::GEOM_Object_ptr theCo
 //  MakeMultiTransformation1D:
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeMultiTransformation1D (GEOM::GEOM_Object_ptr theBlock,
-                                                               const CORBA::Long     theDirFace1,
-                                                               const CORBA::Long     theDirFace2,
-                                                               const CORBA::Long     theNbTimes)
+                                                               CORBA::Long     theDirFace1,
+                                                               CORBA::Long     theDirFace2,
+                                                               CORBA::Long     theNbTimes)
 {
+  beginService( " GEOM_Superv_i::MakeMultiTransformation1D" );
   MESSAGE("GEOM_Superv_i::MakeMultiTransformation1D");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->MakeMultiTransformation1D(theBlock, theDirFace1, theDirFace2, theNbTimes);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->MakeMultiTransformation1D(theBlock, theDirFace1, theDirFace2, theNbTimes);
+  endService( " GEOM_Superv_i::MakeMultiTransformation1D" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1606,18 +2112,21 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeMultiTransformation1D (GEOM::GEOM_Objec
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeMultiTransformation2D 
 (GEOM::GEOM_Object_ptr theBlock,
- const CORBA::Long     theDirFace1U,
- const CORBA::Long     theDirFace2U,
- const CORBA::Long     theNbTimesU,
- const CORBA::Long     theDirFace1V,
- const CORBA::Long     theDirFace2V,
- const CORBA::Long     theNbTimesV)
-{
+ CORBA::Long     theDirFace1U,
+ CORBA::Long     theDirFace2U,
+ CORBA::Long     theNbTimesU,
+ CORBA::Long     theDirFace1V,
+ CORBA::Long     theDirFace2V,
+ CORBA::Long     theNbTimesV)
+{
+  beginService( " GEOM_Superv_i::MakeMultiTransformation2D" );
   MESSAGE("GEOM_Superv_i::MakeMultiTransformation2D");
-  if (CORBA::is_nil(myBlocksOp)) getBlocksOp();
-  return myBlocksOp->MakeMultiTransformation2D(theBlock, 
-                                              theDirFace1U, theDirFace2U, theNbTimesU,
-                                              theDirFace1V, theDirFace2V, theNbTimesV);
+  getBlocksOp();
+  GEOM::GEOM_Object_ptr anObj = myBlocksOp->MakeMultiTransformation2D(theBlock, 
+                                                                     theDirFace1U, theDirFace2U, theNbTimesU,
+                                                                     theDirFace1V, theDirFace2V, theNbTimesV);
+  endService( " GEOM_Superv_i::MakeMultiTransformation2D" );
+  return anObj;
 }
 
 //=============================== CurvesOperations ============================
@@ -1628,9 +2137,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCirclePntVecR (GEOM::GEOM_Object_ptr th
                                                        GEOM::GEOM_Object_ptr theVector,
                                                        CORBA::Double theR)
 {
+  beginService( " GEOM_Superv_i::MakeCirclePntVecR" );
   MESSAGE("GEOM_Superv_i::MakeCirclePntVecR");
-  if (CORBA::is_nil(myCurvesOp)) getCurvesOp();
-  return myCurvesOp->MakeCirclePntVecR(theCenter, theVector, theR);
+  getCurvesOp();
+  GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeCirclePntVecR(theCenter, theVector, theR);
+  endService( " GEOM_Superv_i::MakeCirclePntVecR" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1640,9 +2152,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCircleThreePnt (GEOM::GEOM_Object_ptr t
                                                         GEOM::GEOM_Object_ptr thePnt2,
                                                         GEOM::GEOM_Object_ptr thePnt3)
 {
+  beginService( " GEOM_Superv_i::MakeCircleThreePnt" );
   MESSAGE("GEOM_Superv_i::MakeCircleThreePnt");
-  if (CORBA::is_nil(myCurvesOp)) getCurvesOp();
-  return myCurvesOp->MakeCircleThreePnt(thePnt1, thePnt2, thePnt3);
+  getCurvesOp();
+  GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeCircleThreePnt(thePnt1, thePnt2, thePnt3);
+  endService( " GEOM_Superv_i::MakeCircleThreePnt" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1653,9 +2168,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeEllipse (GEOM::GEOM_Object_ptr theCente
                                                  CORBA::Double theRMajor, 
                                                  CORBA::Double theRMinor)
 {
+  beginService( " GEOM_Superv_i::MakeEllipse" );
   MESSAGE("GEOM_Superv_i::MakeEllipse");
-  if (CORBA::is_nil(myCurvesOp)) getCurvesOp();
-  return myCurvesOp->MakeEllipse(theCenter, theVector, theRMajor, theRMinor);
+  getCurvesOp();
+  GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeEllipse(theCenter, theVector, theRMajor, theRMinor);
+  endService( " GEOM_Superv_i::MakeEllipse" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1665,9 +2183,28 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeArc (GEOM::GEOM_Object_ptr thePnt1,
                                              GEOM::GEOM_Object_ptr thePnt2,
                                              GEOM::GEOM_Object_ptr thePnt3)
 {
+  beginService( " GEOM_Superv_i::MakeArc" );
   MESSAGE("GEOM_Superv_i::MakeArc");
-  if (CORBA::is_nil(myCurvesOp)) getCurvesOp();
-  return myCurvesOp->MakeArc(thePnt1, thePnt2, thePnt3);
+  getCurvesOp();
+  GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeArc(thePnt1, thePnt2, thePnt3);
+  endService( " GEOM_Superv_i::MakeArc" );
+  return anObj;
+}
+
+//=============================================================================
+//  MakeArcCenter:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeArcCenter (GEOM::GEOM_Object_ptr theCenter,
+                                                    GEOM::GEOM_Object_ptr thePnt1,
+                                                    GEOM::GEOM_Object_ptr thePnt2,
+                                                    CORBA::Boolean theSense)
+{
+  beginService( " GEOM_Superv_i::MakeArcCenter" );
+  MESSAGE("GEOM_Superv_i::MakeArcCenter");
+  getCurvesOp();
+  GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeArcCenter(theCenter, thePnt1, thePnt2,theSense);
+  endService( " GEOM_Superv_i::MakeArcCenter" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1675,12 +2212,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeArc (GEOM::GEOM_Object_ptr thePnt1,
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePolyline (GEOM::GEOM_List_ptr thePoints)
 {
+  beginService( " GEOM_Superv_i::MakePolyline" );
   MESSAGE("GEOM_Superv_i::MakePolyline");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplP = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(thePoints, myPOA).in())) {
-    if (CORBA::is_nil(myCurvesOp)) getCurvesOp();
-    return myCurvesOp->MakePolyline(aListImplP->GetList());
+    getCurvesOp();
+    GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakePolyline(aListImplP->GetList());
+    endService( " GEOM_Superv_i::MakePolyline" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakePolyline" );
   return NULL;
 }
 
@@ -1689,12 +2230,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePolyline (GEOM::GEOM_List_ptr thePoints
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSplineBezier (GEOM::GEOM_List_ptr thePoints)
 {
+  beginService( " GEOM_Superv_i::MakeSplineBezier" );
   MESSAGE("GEOM_Superv_i::MakeSplineBezier");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplP = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(thePoints, myPOA).in())) {
-    if (CORBA::is_nil(myCurvesOp)) getCurvesOp();
-    return myCurvesOp->MakeSplineBezier(aListImplP->GetList());
+    getCurvesOp();
+    GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeSplineBezier(aListImplP->GetList());
+    endService( " GEOM_Superv_i::MakeSplineBezier" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeSplineBezier" );
   return NULL;
 }
 
@@ -1703,12 +2248,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSplineBezier (GEOM::GEOM_List_ptr thePo
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSplineInterpolation (GEOM::GEOM_List_ptr thePoints)
 {
+  beginService( " GEOM_Superv_i::MakeSplineInterpolation" );
   MESSAGE("GEOM_Superv_i::MakeSplineInterpolation");
   if (GEOM_List_i<GEOM::ListOfGO>* aListImplP = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(thePoints, myPOA).in())) {
-    if (CORBA::is_nil(myCurvesOp)) getCurvesOp();
-    return myCurvesOp->MakeSplineInterpolation(aListImplP->GetList());
+    getCurvesOp();
+    GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeSplineInterpolation(aListImplP->GetList());
+    endService( " GEOM_Superv_i::MakeSplineInterpolation" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeSplineInterpolation" );
   return NULL;
 }
 
@@ -1718,12 +2267,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSplineInterpolation (GEOM::GEOM_List_pt
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSketcher (const char* theCommand, 
                                                   GEOM::GEOM_List_ptr theWorkingPlane)
 {
+  beginService( " GEOM_Superv_i::MakeSketcher" );
   MESSAGE("GEOM_Superv_i::MakeSketcher");
   if (GEOM_List_i<GEOM::ListOfDouble>* aListImplWP = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfDouble>*>(GetServant(theWorkingPlane, myPOA).in())) {
-    if (CORBA::is_nil(myCurvesOp)) getCurvesOp();
-    return myCurvesOp->MakeSketcher(theCommand, aListImplWP->GetList());
+    getCurvesOp();
+    GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeSketcher(theCommand, aListImplWP->GetList());
+    endService( " GEOM_Superv_i::MakeSketcher" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeSketcher" );
   return NULL;
 }
 
@@ -1734,9 +2287,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSketcher (const char* theCommand,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilletAll (GEOM::GEOM_Object_ptr theShape,
                                                    CORBA::Double theR)
 {
+  beginService( " GEOM_Superv_i::MakeFilletAll" );
   MESSAGE("GEOM_Superv_i::MakeFilletAllMakeSketcher");
-  if (CORBA::is_nil(myLocalOp)) getLocalOp();
-  return myLocalOp->MakeFilletAll(theShape, theR);
+  getLocalOp();
+  GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeFilletAll(theShape, theR);
+  endService( " GEOM_Superv_i::MakeFilletAll" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1746,12 +2302,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilletEdges (GEOM::GEOM_Object_ptr theS
                                                      CORBA::Double theR,
                                                      GEOM::GEOM_List_ptr theEdges)
 {
+  beginService( " GEOM_Superv_i::MakeFilletEdges" );
   MESSAGE("GEOM_Superv_i::MakeFilletEdges");
   if (GEOM_List_i<GEOM::ListOfLong>* aListImplE = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theEdges, myPOA).in())) {
-    if (CORBA::is_nil(myLocalOp)) getLocalOp();
-    return myLocalOp->MakeFilletEdges(theShape, theR, aListImplE->GetList());
+    getLocalOp();
+    GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeFilletEdges(theShape, theR, aListImplE->GetList());
+    endService( " GEOM_Superv_i::MakeFilletEdges" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeFilletEdges" );
   return NULL;
 }
 
@@ -1762,12 +2322,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilletFaces (GEOM::GEOM_Object_ptr theS
                                                      CORBA::Double theR,
                                                      GEOM::GEOM_List_ptr theFaces)
 {
+  beginService( " GEOM_Superv_i::MakeFilletFaces" );
   MESSAGE("GEOM_Superv_i::MakeFilletFaces");
   if (GEOM_List_i<GEOM::ListOfLong>* aListImplF = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theFaces, myPOA).in())) {
-    if (CORBA::is_nil(myLocalOp)) getLocalOp();
-    return myLocalOp->MakeFilletFaces(theShape, theR, aListImplF->GetList());
+    getLocalOp();
+    GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeFilletFaces(theShape, theR, aListImplF->GetList());
+    endService( " GEOM_Superv_i::MakeFilletFaces" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeFilletFaces" );
   return NULL;
 }
 
@@ -1776,9 +2340,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilletFaces (GEOM::GEOM_Object_ptr theS
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferAll (GEOM::GEOM_Object_ptr theShape, CORBA::Double theD)
 {
+  beginService( " GEOM_Superv_i::MakeChamferAll" );
   MESSAGE("GEOM_Superv_i::MakeChamferAll");
-  if (CORBA::is_nil(myLocalOp)) getLocalOp();
-  return myLocalOp->MakeChamferAll(theShape, theD);
+  getLocalOp();
+  GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeChamferAll(theShape, theD);
+  endService( " GEOM_Superv_i::MakeChamferAll" );
+  return anObj;
 }
   
 //=============================================================================
@@ -1788,9 +2355,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferEdge (GEOM::GEOM_Object_ptr theS
                                                      CORBA::Double theD1, CORBA::Double theD2,
                                                      CORBA::Long theFace1, CORBA::Long theFace2)
 {
+  beginService( " GEOM_Superv_i::MakeChamferEdge" );
   MESSAGE("GEOM_Superv_i::MakeChamferEdge");
-  if (CORBA::is_nil(myLocalOp)) getLocalOp();
-  return myLocalOp->MakeChamferEdge(theShape, theD1, theD2, theFace1, theFace2);
+  getLocalOp();
+  GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeChamferEdge(theShape, theD1, theD2, theFace1, theFace2);
+  endService( " GEOM_Superv_i::MakeChamferEdge" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1800,12 +2370,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferFaces (GEOM::GEOM_Object_ptr the
                                                       CORBA::Double theD1, CORBA::Double theD2,
                                                       GEOM::GEOM_List_ptr theFaces)
 {
+  beginService( " GEOM_Superv_i::MakeChamferFaces" );
   MESSAGE("GEOM_Superv_i::MakeChamferFaces");
   if (GEOM_List_i<GEOM::ListOfLong>* aListImplF = 
       dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theFaces, myPOA).in())) {
-    if (CORBA::is_nil(myLocalOp)) getLocalOp();
-    return myLocalOp->MakeChamferFaces(theShape, theD1, theD2, aListImplF->GetList());
+    getLocalOp();
+    GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeChamferFaces(theShape, theD1, theD2, aListImplF->GetList());
+    endService( " GEOM_Superv_i::MakeChamferFaces" );
+    return anObj;
   }
+  endService( " GEOM_Superv_i::MakeChamferFaces" );
   return NULL;
 }
 
@@ -1817,9 +2391,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeArchimede (GEOM::GEOM_Object_ptr theSha
                                                    CORBA::Double theWaterDensity,
                                                    CORBA::Double theMeshingDeflection)
 {
+  beginService( " GEOM_Superv_i::MakeArchimede" );
   MESSAGE("GEOM_Superv_i::MakeArchimede");
-  if (CORBA::is_nil(myLocalOp)) getLocalOp();
-  return myLocalOp->MakeArchimede(theShape, theWeight, theWaterDensity, theMeshingDeflection);
+  getLocalOp();
+  GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeArchimede(theShape, theWeight, theWaterDensity, theMeshingDeflection);
+  endService( " GEOM_Superv_i::MakeArchimede" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1828,9 +2405,12 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeArchimede (GEOM::GEOM_Object_ptr theSha
 CORBA::Long GEOM_Superv_i::GetSubShapeIndex (GEOM::GEOM_Object_ptr theShape,
                                             GEOM::GEOM_Object_ptr theSubShape)
 {
+  beginService( " GEOM_Superv_i::GetSubShapeIndex" );
   MESSAGE("GEOM_Superv_i::GetSubShapeIndexMakeArchimede");
-  if (CORBA::is_nil(myLocalOp)) getLocalOp();
-  return myLocalOp->GetSubShapeIndex(theShape, theSubShape);
+  getLocalOp();
+  CORBA::Long aRes = myLocalOp->GetSubShapeIndex(theShape, theSubShape);
+  endService( " GEOM_Superv_i::GetSubShapeIndex" );
+  return aRes;
 }
 
 //=============================== GroupOperations =============================
@@ -1840,9 +2420,12 @@ CORBA::Long GEOM_Superv_i::GetSubShapeIndex (GEOM::GEOM_Object_ptr theShape,
 GEOM::GEOM_Object_ptr GEOM_Superv_i::CreateGroup (GEOM::GEOM_Object_ptr theMainShape, 
                                                  CORBA::Long theShapeType)
 {
+  beginService( " GEOM_Superv_i::CreateGroup" );
   MESSAGE("GEOM_Superv_i::CreateGroup");
-  if (CORBA::is_nil(myGroupOp)) getGroupOp();
-  return myGroupOp->CreateGroup(theMainShape, theShapeType);
+  getGroupOp();
+  GEOM::GEOM_Object_ptr anObj = myGroupOp->CreateGroup(theMainShape, theShapeType);
+  endService( " GEOM_Superv_i::CreateGroup" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1851,9 +2434,11 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::CreateGroup (GEOM::GEOM_Object_ptr theMainS
 void GEOM_Superv_i::AddObject (GEOM::GEOM_Object_ptr theGroup, 
                               CORBA::Long theSubShapeId)
 {
+  beginService( " GEOM_Superv_i::AddObject" );
   MESSAGE("GEOM_Superv_i::AddObject");
-  if (CORBA::is_nil(myGroupOp)) getGroupOp();
+  getGroupOp();
   myGroupOp->AddObject(theGroup, theSubShapeId);
+  endService( " GEOM_Superv_i::AddObject" );
 }
 
 //=============================================================================
@@ -1862,9 +2447,11 @@ void GEOM_Superv_i::AddObject (GEOM::GEOM_Object_ptr theGroup,
 void GEOM_Superv_i::RemoveObject (GEOM::GEOM_Object_ptr theGroup, 
                                  CORBA::Long theSubShapeId)
 {
+  beginService( " GEOM_Superv_i::RemoveObject" );
   MESSAGE("GEOM_Superv_i::RemoveObject");
-  if (CORBA::is_nil(myGroupOp)) getGroupOp();
+  getGroupOp();
   myGroupOp->RemoveObject(theGroup, theSubShapeId);
+  endService( " GEOM_Superv_i::RemoveObject" );
 }
 
 //=============================================================================
@@ -1872,9 +2459,12 @@ void GEOM_Superv_i::RemoveObject (GEOM::GEOM_Object_ptr theGroup,
 //=============================================================================
 CORBA::Long GEOM_Superv_i::GetType (GEOM::GEOM_Object_ptr theGroup)
 {
+  beginService( " GEOM_Superv_i::GetType" );
   MESSAGE("GEOM_Superv_i::GetType");
-  if (CORBA::is_nil(myGroupOp)) getGroupOp();
-  return myGroupOp->GetType(theGroup);
+  getGroupOp();
+  CORBA::Long aResult = myGroupOp->GetType(theGroup);
+  endService( " GEOM_Superv_i::GetType" );
+  return aResult;
 }
 
 //=============================================================================
@@ -1882,9 +2472,12 @@ CORBA::Long GEOM_Superv_i::GetType (GEOM::GEOM_Object_ptr theGroup)
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Superv_i::GetMainShape (GEOM::GEOM_Object_ptr theGroup)
 {
+  beginService( " GEOM_Superv_i::GetMainShape" );
   MESSAGE("GEOM_Superv_i::GetMainShape");
-  if (CORBA::is_nil(myGroupOp)) getGroupOp();
-  return myGroupOp->GetMainShape(theGroup);
+  getGroupOp();
+  GEOM::GEOM_Object_ptr anObj = myGroupOp->GetMainShape(theGroup);
+  endService( " GEOM_Superv_i::GetMainShape" );
+  return anObj;
 }
 
 //=============================================================================
@@ -1892,12 +2485,14 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::GetMainShape (GEOM::GEOM_Object_ptr theGrou
 //=============================================================================
 GEOM::GEOM_List_ptr GEOM_Superv_i::GetObjects (GEOM::GEOM_Object_ptr theGroup)
 {
+  beginService( " GEOM_Superv_i::GetObjects" );
   MESSAGE("GEOM_Superv_i::GetObjects");
-  if (CORBA::is_nil(myGroupOp)) getGroupOp();
+  getGroupOp();
 
   GEOM::ListOfLong* aList = myGroupOp->GetObjects(theGroup);
   GEOM_List_i<GEOM::ListOfLong>* aListPtr = new GEOM_List_i<GEOM::ListOfLong>(*(aList));
   MESSAGE(" List of "<<aListPtr->GetList().length()<<" element(s)");
+  endService( " GEOM_Superv_i::GetObjects" );
   return aListPtr->_this();
 }