diff --git a/ros/inc/InterfaceGraphic_telem.hxx b/ros/inc/InterfaceGraphic_telem.hxx
index c5d0292..d3bdb6f 100755
--- a/ros/inc/InterfaceGraphic_telem.hxx
+++ b/ros/inc/InterfaceGraphic_telem.hxx
@@ -21,31 +21,31 @@ for InterfaceGraphic_Parray.hxx definitions
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530) && ! defined(typename)
 #define IMPLEMENT_MEMORY_OPERATORS \
   void* operator new (size_t size) {\
-  void* p = malloc( size );\
+  void* p = ::operator new( size );\
   memset(p, 0, size);\
   return p;\
   }\
   void operator delete(void* p) {\
-  free( p );\
+  ::operator delete( p );\
   }
 #else
 //if other
 #define IMPLEMENT_MEMORY_OPERATORS \
   void* operator new (size_t size) {\
-  void* p = malloc( size );\
+  void* p = ::operator new( size );\
   memset(p, 0, size);\
   return p;\
   }\
   void* operator new[] (size_t size) {\
-  void* p = malloc( size );\
+  void* p = ::operator new( size );\
   memset(p, 0, size);\
   return p;\
   }\
   void operator delete(void* p) { \
-  free( p );\
+  ::operator delete( p );\
   }\
   void operator delete[](void* p) {\
-  free( p );\
+  ::operator delete( p );\
   }
 #endif
 
diff --git a/ros/inc/OpenGl_Memory.hxx b/ros/inc/OpenGl_Memory.hxx
index bc03f8f..15bb78a 100755
--- a/ros/inc/OpenGl_Memory.hxx
+++ b/ros/inc/OpenGl_Memory.hxx
@@ -1,14 +1,14 @@
 #ifndef OPENGL_MEMORY_H
 #define OPENGL_MEMORY_H
 
-#include <OpenGl_tgl_all.hxx>
-#include <Standard_TypeDef.hxx>
-#include <NCollection_DataMap.hxx>
-#include <NCollection_Stack.hxx>
-#include <NCollection_List.hxx>
-#include <NCollection_Array1.hxx>
-#include <NCollection_Vector.hxx>
-
+#define __MALLOC__(siz) __opengl__malloc(siz)
+#define __FREE__(ptr) __opengl__free(ptr)
+#define __CALLOC__(num, siz) __opengl__calloc(num, siz)
+#define __REALLOC__(ptr, newSiz, oldSiz) __opengl__realloc(ptr, newSiz, oldSiz)
+void *__opengl__malloc(size_t siz);
+void __opengl__free(void *ptr);
+void *__opengl__calloc(size_t num, size_t siz);
+void *__opengl__realloc(void *ptr, size_t newSiz, size_t oldSiz);
 
 template <class XType> XType *cmn_resizemem( XType *ptr, Tint size )
 {
diff --git a/ros/inc/OpenGl_tsm.hxx b/ros/inc/OpenGl_tsm.hxx
index 2e1dc0b..bc587a3 100755
--- a/ros/inc/OpenGl_tsm.hxx
+++ b/ros/inc/OpenGl_tsm.hxx
@@ -118,8 +118,9 @@ typedef  enum
 
 typedef  union  TSM_ELEM_DATA_UNION
 {
-  void      *pdata;
+  union TSM_ELEM_DATA_UNION *pdata;
   Tint       ldata;
+  IMPLEMENT_MEMORY_OPERATORS
 } TSM_ELEM_DATA, *tsm_elem_data;
 
 typedef  struct  TSM_ELEM_STRUCT
diff --git a/ros/src/OpenGl/OpenGl_GraphicDriver_3.cxx b/ros/src/OpenGl/OpenGl_GraphicDriver_3.cxx
index 4e36c9f..f4f6964 100755
--- a/ros/src/OpenGl/OpenGl_GraphicDriver_3.cxx
+++ b/ros/src/OpenGl/OpenGl_GraphicDriver_3.cxx
@@ -26,6 +26,8 @@
 
 #include <OpenGl_tgl_funcs.hxx>
 
+#include <OpenGl_Memory.hxx>
+
 int GenerateMarkerBitmap( int theId, unsigned int theWidth, unsigned int theHeight, unsigned char* theArray);
 
 //-Aliases
@@ -121,7 +123,7 @@ void OpenGl_GraphicDriver::MarkerContextGroup (const Graphic3d_CGroup& ACGroup,
 
   int aByteWidth = AMarkWidth / 8;
 
-  unsigned char *anArray = (unsigned char*) malloc(ATexture->Length());
+  unsigned char *anArray = (unsigned char*) __MALLOC__(ATexture->Length());
   for( int anIndex = ATexture->Upper() - ATexture->Lower() - aByteWidth + 1; anIndex >= 0; anIndex -= aByteWidth )
     for( int i = 0; i < aByteWidth; i++ )
       anArray[ATexture->Upper() - ATexture->Lower() - aByteWidth + 1 - anIndex + i ] = ATexture->Value( anIndex + i + 1 );
@@ -134,7 +136,7 @@ void OpenGl_GraphicDriver::MarkerContextGroup (const Graphic3d_CGroup& ACGroup,
   }
   call_togl_markercontextgroup (&MyCGroup, int (NoInsert));
 
-  free(anArray);
+  __FREE__(anArray);
 }
 
 
diff --git a/ros/src/OpenGl/OpenGl_GraphicDriver_9.cxx b/ros/src/OpenGl/OpenGl_GraphicDriver_9.cxx
index 846ace2..332fcd8 100755
--- a/ros/src/OpenGl/OpenGl_GraphicDriver_9.cxx
+++ b/ros/src/OpenGl/OpenGl_GraphicDriver_9.cxx
@@ -43,6 +43,7 @@
 
 #include <Image_Image.hxx>
 
+#include <OpenGl_Memory.hxx>
 
 //-Aliases
 
@@ -73,7 +74,7 @@ Standard_Integer OpenGl_GraphicDriver::CreateTexture(const Graphic3d_TypeOfTextu
   TexUpperBounds->SetValue(1, ((Standard_Real) (MyPic->Width())/((Standard_Real) aGlWidth)));
   TexUpperBounds->SetValue(2, ((Standard_Real) (MyPic->Height())/((Standard_Real) aGlHeight)));
 
-  unsigned char *MyImageData = (unsigned char *)malloc(aGlWidth*aGlHeight*4);
+  unsigned char *MyImageData = (unsigned char *)__MALLOC__(aGlWidth*aGlHeight*4);
   unsigned char *MyData = MyImageData;
   int TexId;
   int i,j;
@@ -136,7 +137,7 @@ Standard_Integer OpenGl_GraphicDriver::CreateTexture(const Graphic3d_TypeOfTextu
           TexId = -1;
         }
 
-        free(MyImageData);
+        __FREE__(MyImageData);
         return TexId;
 
 }
@@ -234,7 +235,7 @@ void OpenGl_GraphicDriver::BackgroundImage( const Standard_CString FileName,
   Standard_Boolean result = AlienImage::LoadImageFile( FileName, image, width, height );
 
   if ( result ) {
-    unsigned char *data = (unsigned char*)malloc( width * height * 3 );
+    unsigned char *data = (unsigned char*)__MALLOC__( width * height * 3 );
     unsigned char *pdata = data;
     Standard_Integer i,j;
     Quantity_Color color;
@@ -249,7 +250,7 @@ void OpenGl_GraphicDriver::BackgroundImage( const Standard_CString FileName,
         }
         call_togl_create_bg_texture( (CALL_DEF_VIEW*)&MyCView, width, height, data, (int)FillStyle );
         // delete data here
-        free( data );
+        __FREE__( data );
     }
   }
 #endif // OCC1188
@@ -582,4 +583,4 @@ void OpenGl_GraphicDriver::GraduatedTrihedronMinMaxValues(const Standard_ShortRe
                                                           const Standard_ShortReal zmax)
 {
     call_togl_graduatedtrihedron_minmaxvalues(xmin, ymin, zmin, xmax, ymax, zmax);
-}
\ No newline at end of file
+}
diff --git a/ros/src/OpenGl/OpenGl_ImageBox.cxx b/ros/src/OpenGl/OpenGl_ImageBox.cxx
index 68ccc65..5aeebfa 100755
--- a/ros/src/OpenGl/OpenGl_ImageBox.cxx
+++ b/ros/src/OpenGl/OpenGl_ImageBox.cxx
@@ -29,6 +29,8 @@
 
 #include <OpenGl_ImageBox.hxx>
 
+#include <OpenGl_Memory.hxx>
+
 /*----------------------------------------------------------------------*/
 /*
 * Types definis
@@ -102,7 +104,7 @@ static ImageRec *ImageOpen(char *fileName)
     swapFlag = 0;
   }
 
-  image = (ImageRec *)malloc(sizeof(ImageRec));
+  image = (ImageRec *)__MALLOC__(sizeof(ImageRec));
   if (image == NULL) {
     fprintf(stderr, "Out of memory!\n");
     exit(1);
@@ -118,10 +120,10 @@ static ImageRec *ImageOpen(char *fileName)
     ConvertShort(&image->imagic, 6);
   }
 
-  image->tmp = (unsigned char *)malloc(image->xsize*256);
-  image->tmpR = (unsigned char *)malloc(image->xsize*256);
-  image->tmpG = (unsigned char *)malloc(image->xsize*256);
-  image->tmpB = (unsigned char *)malloc(image->xsize*256);
+  image->tmp = (unsigned char *)__MALLOC__(image->xsize*256);
+  image->tmpR = (unsigned char *)__MALLOC__(image->xsize*256);
+  image->tmpG = (unsigned char *)__MALLOC__(image->xsize*256);
+  image->tmpB = (unsigned char *)__MALLOC__(image->xsize*256);
   if (image->tmp == NULL || image->tmpR == NULL || image->tmpG == NULL ||
     image->tmpB == NULL) {
       fprintf(stderr, "Out of memory!\n");
@@ -130,8 +132,8 @@ static ImageRec *ImageOpen(char *fileName)
 
     if ((image->type & 0xFF00) == 0x0100) {
       x = image->ysize * image->zsize * sizeof(unsigned);
-      image->rowStart = (unsigned *)malloc(x);
-      image->rowSize = (int *)malloc(x);
+      image->rowStart = (unsigned *)__MALLOC__(x);
+      image->rowSize = (int *)__MALLOC__(x);
       if (image->rowStart == NULL || image->rowSize == NULL) {
         fprintf(stderr, "Out of memory!\n");
         exit(1);
@@ -152,11 +154,11 @@ static ImageRec *ImageOpen(char *fileName)
 static void
 ImageClose(ImageRec *image) {
   fclose(image->file);
-  free(image->tmp);
-  free(image->tmpR);
-  free(image->tmpG);
-  free(image->tmpB);
-  free(image);
+  __FREE__(image->tmp);
+  __FREE__(image->tmpR);
+  __FREE__(image->tmpG);
+  __FREE__(image->tmpB);
+  __FREE__(image);
 }
 /*----------------------------------------------------------------------*/
 
@@ -212,11 +214,11 @@ void ReadScaledImage(char *file, int xsize, int ysize, char *buf, unsigned short
   *zsize = image->zsize;
 
   /* Allocation memoire */
-  rbuf=(unsigned char *)malloc(image->xsize * sizeof(unsigned char));
+  rbuf=(unsigned char *)__MALLOC__(image->xsize * sizeof(unsigned char));
 
   if (image->zsize > 2) {
-    gbuf = (unsigned char *) malloc (image->xsize * sizeof(unsigned char));
-    bbuf = (unsigned char *) malloc (image->xsize * sizeof(unsigned char));
+    gbuf = (unsigned char *) __MALLOC__ (image->xsize * sizeof(unsigned char));
+    bbuf = (unsigned char *) __MALLOC__ (image->xsize * sizeof(unsigned char));
   }
 
   /* Lecture image rang apres rang */    
@@ -249,10 +251,10 @@ void ReadScaledImage(char *file, int xsize, int ysize, char *buf, unsigned short
   }
 
   /* delete image buffers */
-  free(rbuf);
+  __FREE__(rbuf);
   if (*zsize > 2) {
-    free(gbuf);
-    free(bbuf);
+    __FREE__(gbuf);
+    __FREE__(bbuf);
   }
 
   ImageClose(image);    
@@ -320,11 +322,11 @@ read_texture(char *name, int *width, int *height, int *components) {
   (*width)=image->xsize;
   (*height)=image->ysize;
   (*components)=image->zsize;
-  base = (unsigned *)malloc(image->xsize*image->ysize*sizeof(unsigned));
-  rbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char));
-  gbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char));
-  bbuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char));
-  abuf = (unsigned char *)malloc(image->xsize*sizeof(unsigned char));
+  base = (unsigned *)__MALLOC__(image->xsize*image->ysize*sizeof(unsigned));
+  rbuf = (unsigned char *)__MALLOC__(image->xsize*sizeof(unsigned char));
+  gbuf = (unsigned char *)__MALLOC__(image->xsize*sizeof(unsigned char));
+  bbuf = (unsigned char *)__MALLOC__(image->xsize*sizeof(unsigned char));
+  abuf = (unsigned char *)__MALLOC__(image->xsize*sizeof(unsigned char));
   if(!base || !rbuf || !gbuf || !bbuf)
     return NULL;
   lptr = base;
@@ -349,10 +351,10 @@ read_texture(char *name, int *width, int *height, int *components) {
     }
   }
   ImageClose(image);
-  free(rbuf);
-  free(gbuf);
-  free(bbuf);
-  free(abuf);
+  __FREE__(rbuf);
+  __FREE__(gbuf);
+  __FREE__(bbuf);
+  __FREE__(abuf);
 
   return (unsigned *) base;
 }
diff --git a/ros/src/OpenGl/OpenGl_LightBox.cxx b/ros/src/OpenGl/OpenGl_LightBox.cxx
index eb45de9..f958e18 100755
--- a/ros/src/OpenGl/OpenGl_LightBox.cxx
+++ b/ros/src/OpenGl/OpenGl_LightBox.cxx
@@ -348,7 +348,7 @@ static int find_wks(Tint WksID, int alloc)
       wks = new TEL_LIGHT_WKS[wks_size];
     else
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      wks = (TEL_LIGHT_WKS*)realloc(wks, wks_size*sizeof(TEL_LIGHT_WKS));
+      wks = (TEL_LIGHT_WKS*)__REALLOC__(wks, wks_size*sizeof(TEL_LIGHT_WKS));
 #else
       wks = cmn_resizemem<TEL_LIGHT_WKS>(wks, wks_size);
 #endif
@@ -392,7 +392,7 @@ static int find_light(int WksIdx, Tint LightID, int alloc)
     else
       wks[WksIdx].lights =
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      (TEL_LIGHT_DATA*)realloc( wks[WksIdx].lights,
+      (TEL_LIGHT_DATA*)__REALLOC__( wks[WksIdx].lights,
       wks[WksIdx].lights_size*sizeof(TEL_LIGHT_DATA) );
 #else
       cmn_resizemem<TEL_LIGHT_DATA>( wks[WksIdx].lights,
@@ -537,7 +537,7 @@ TStatus RemoveWksLight(Tint WksID)
   if (wks_entry == -1) return TFailure;
 
   /* destruction de toute la wks */
-  free(wks[wks_entry].lights);
+  __FREE__(wks[wks_entry].lights);
   memcpy(&wks[wks_entry],
     &wks[wks_entry+1],
     (wks_count - wks_entry - 1)*sizeof(TEL_LIGHT_WKS));
diff --git a/ros/src/OpenGl/OpenGl_Memory.cxx b/ros/src/OpenGl/OpenGl_Memory.cxx
index dba397f..d9cb36c 100755
--- a/ros/src/OpenGl/OpenGl_Memory.cxx
+++ b/ros/src/OpenGl/OpenGl_Memory.cxx
@@ -4,3 +4,25 @@ OpenGl_MemoryMgr::OpenGl_MemoryMgr(){}
 OpenGl_MemoryMgr::OpenGl_MemoryMgr(const OpenGl_MemoryMgr&){}
 OpenGl_MemoryMgr::~OpenGl_MemoryMgr(){}
 
+void *__opengl__malloc(size_t siz)
+{
+	return ::operator new(siz);
+}
+
+void __opengl__free(void *ptr)
+{
+	::operator delete(ptr);
+}
+
+void *__opengl__calloc(size_t num, size_t siz)
+{
+	return ::operator new(num * siz);
+}
+
+void *__opengl__realloc(void *ptr, size_t newSiz, size_t oldSiz)
+{
+	void *newPtr = ::operator new(newSiz);
+	memcpy(newPtr, ptr, oldSiz);
+	::operator delete(ptr);
+	return newPtr;
+}
diff --git a/ros/src/OpenGl/OpenGl_PrimitiveArray.cxx b/ros/src/OpenGl/OpenGl_PrimitiveArray.cxx
index 70aa0f2..48af892 100755
--- a/ros/src/OpenGl/OpenGl_PrimitiveArray.cxx
+++ b/ros/src/OpenGl/OpenGl_PrimitiveArray.cxx
@@ -315,7 +315,7 @@ ParrayAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   if( k[0]->id != PARRAY_ID ) return TFailure;
 
-  ((tsm_elem_data)(d.pdata))->pdata = k[0]->data.pdata;
+  d.pdata->pdata = (TSM_ELEM_DATA *)k[0]->data.pdata;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_ResourceTexture.cxx b/ros/src/OpenGl/OpenGl_ResourceTexture.cxx
index 9b5d27b..854dd5b 100755
--- a/ros/src/OpenGl/OpenGl_ResourceTexture.cxx
+++ b/ros/src/OpenGl/OpenGl_ResourceTexture.cxx
@@ -36,7 +36,7 @@ OpenGl_ResourceTexture::OpenGl_ResourceTexture(const OpenGl_ResourceTexture& the
 
 //=======================================================================
 //function : Clean
-//purpose  : free OpenGl memory allocated for texture resource
+//purpose  : __FREE__ OpenGl memory allocated for texture resource
 //=======================================================================
 
 void OpenGl_ResourceTexture::Clean()
diff --git a/ros/src/OpenGl/OpenGl_ResourceVBO.cxx b/ros/src/OpenGl/OpenGl_ResourceVBO.cxx
index 7201fe1..3944643 100755
--- a/ros/src/OpenGl/OpenGl_ResourceVBO.cxx
+++ b/ros/src/OpenGl/OpenGl_ResourceVBO.cxx
@@ -35,7 +35,7 @@ OpenGl_ResourceVBO::OpenGl_ResourceVBO( const OpenGl_ResourceVBO& theResource)
 
 //=======================================================================
 //function : Clean
-//purpose  : free OpenGl memory allocated for vbo resource
+//purpose  : __FREE__ OpenGl memory allocated for vbo resource
 //=======================================================================
 
 void OpenGl_ResourceVBO::Clean()
diff --git a/ros/src/OpenGl/OpenGl_TextureBox.cxx b/ros/src/OpenGl/OpenGl_TextureBox.cxx
index f429c64..9a9f601 100755
--- a/ros/src/OpenGl/OpenGl_TextureBox.cxx
+++ b/ros/src/OpenGl/OpenGl_TextureBox.cxx
@@ -214,7 +214,7 @@ static TextureDataID FindFreeTextureData(void)
   {
     textures_data_size += GROW_TEXTURES_DATA;
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-    texdata = (texData*)realloc(texdata, textures_data_size*sizeof(texData));
+    texdata = (texData*)__REALLOC__(texdata, textures_data_size*sizeof(texData));
 #else
     texdata = cmn_resizemem<texData>(texdata, textures_data_size);
 #endif
@@ -255,7 +255,7 @@ static TextureID FindFreeTexture(void)
   {
     textures_size += GROW_TEXTURES;
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-    textab = (texDraw*)realloc(textab, textures_size*sizeof(texDraw));
+    textab = (texDraw*)__REALLOC__(textab, textures_size*sizeof(texDraw));
 #else
     textab = cmn_resizemem<texDraw>(textab, textures_size);
 #endif
@@ -570,13 +570,13 @@ static int InstallTextureInContext(TextureID ID)
     textab[ID].context_size += GROW_CONTEXT;
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
     textab[ID].number =
-      (GLuint*)realloc(textab[ID].number, textab[ID].context_size*sizeof(GLuint));
+      (GLuint*)__REALLOC__(textab[ID].number, textab[ID].context_size*sizeof(GLuint));
     textab[ID].context =
-      (GLCONTEXT*)realloc(textab[ID].context, textab[ID].context_size*sizeof(GLCONTEXT));
+      (GLCONTEXT*)__REALLOC__(textab[ID].context, textab[ID].context_size*sizeof(GLCONTEXT));
     textab[ID].drawable =
-      (GLDRAWABLE*)realloc(textab[ID].drawable, textab[ID].context_size*sizeof(GLDRAWABLE));
+      (GLDRAWABLE*)__REALLOC__(textab[ID].drawable, textab[ID].context_size*sizeof(GLDRAWABLE));
     textab[ID].use_bind_texture =
-      (char*)realloc(textab[ID].use_bind_texture, textab[ID].context_size);
+      (char*)__REALLOC__(textab[ID].use_bind_texture, textab[ID].context_size);
 #else
     textab[ID].number =
       cmn_resizemem<GLuint>(textab[ID].number, textab[ID].context_size);
@@ -593,10 +593,10 @@ static int InstallTextureInContext(TextureID ID)
       (textab[ID].use_bind_texture == NULL) )
     {
       /* erreur => libere tout */
-      free(textab[ID].number);
-      free(textab[ID].context);
-      free(textab[ID].drawable);
-      free(textab[ID].use_bind_texture);
+      __FREE__(textab[ID].number);
+      __FREE__(textab[ID].context);
+      __FREE__(textab[ID].drawable);
+      __FREE__(textab[ID].use_bind_texture);
       textab[ID].context_size = 0;
 
       return TEXTUREBOX_ERROR;
@@ -665,7 +665,7 @@ static TextureID GetTexture(char *FileName, texDataStatus status)
   }
   else
     if (texdata[i].share_count != 0)
-      free(texdata[i].image);  
+      __FREE__(texdata[i].image);  
 
   return j;
 }
@@ -690,7 +690,7 @@ static TextureID GetTextureData(char *FileName, texDataStatus status, const GLin
 
     texdata[i].share_count = 0;
     strcpy(texdata[i].imageFileName, FileName);
-    texdata[i].image = (GLubyte *)malloc(width*height*4*sizeof(GLubyte));
+    texdata[i].image = (GLubyte *)__MALLOC__(width*height*4*sizeof(GLubyte));
     memcpy(texdata[i].image, data, (width*height*4));
     texdata[i].imageWidth = width;
     texdata[i].imageHeight = height;
@@ -725,7 +725,7 @@ static TextureID GetTextureData(char *FileName, texDataStatus status, const GLin
   }
   else
     if (texdata[i].share_count != 0)
-      free(texdata[i].image);  
+      __FREE__(texdata[i].image);  
 
   return j;
 }
@@ -869,7 +869,7 @@ void FreeTexture(TextureID ID)
   if (texdata[data].share_count == 0)
   {      
     /* liberation des datas de la textures */
-    free(texdata[data].image);
+    __FREE__(texdata[data].image);
 
 #if defined(GL_EXT_texture_object)
     if(use_bind_texture)
@@ -918,10 +918,10 @@ void FreeTexture(TextureID ID)
 #else
       if( data+1 == textures_data_count ) textures_data_count--;
 #endif
-      free(textab[ID].context);
-      free(textab[ID].drawable);
-      free(textab[ID].use_bind_texture);
-      free(textab[ID].number);
+      __FREE__(textab[ID].context);
+      __FREE__(textab[ID].drawable);
+      __FREE__(textab[ID].use_bind_texture);
+      __FREE__(textab[ID].number);
 
     } /* use_bind_texture */
 #endif /* GL_EXT_texture_object */    
diff --git a/ros/src/OpenGl/OpenGl_addnames.cxx b/ros/src/OpenGl/OpenGl_addnames.cxx
index 6011383..0545119 100755
--- a/ros/src/OpenGl/OpenGl_addnames.cxx
+++ b/ros/src/OpenGl/OpenGl_addnames.cxx
@@ -56,7 +56,7 @@ AddNamesetAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
   }
   data->num = num;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_applid.cxx b/ros/src/OpenGl/OpenGl_applid.cxx
index 62971a9..e38236f 100755
--- a/ros/src/OpenGl/OpenGl_applid.cxx
+++ b/ros/src/OpenGl/OpenGl_applid.cxx
@@ -35,7 +35,7 @@ TelApplicationDataInitClass( TelType *el )
 static  TStatus
 ApplicationDataAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 {
-  ((tsm_elem_data)(d.pdata))->pdata = k[0]->data.pdata;
+  d.pdata->pdata = (TSM_ELEM_DATA *)k[0]->data.pdata;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_bintcol.cxx b/ros/src/OpenGl/OpenGl_bintcol.cxx
index 272a284..2e379f9 100755
--- a/ros/src/OpenGl/OpenGl_bintcol.cxx
+++ b/ros/src/OpenGl/OpenGl_bintcol.cxx
@@ -44,7 +44,7 @@ BackInteriorColourAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_colour)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_bsurfprop.cxx b/ros/src/OpenGl/OpenGl_bsurfprop.cxx
index 88a4b99..49facde 100755
--- a/ros/src/OpenGl/OpenGl_bsurfprop.cxx
+++ b/ros/src/OpenGl/OpenGl_bsurfprop.cxx
@@ -43,7 +43,7 @@ BackSurfaceAreaPropertiesAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_surf_prop)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_charexpan.cxx b/ros/src/OpenGl/OpenGl_charexpan.cxx
index 51c2242..46f4b5c 100755
--- a/ros/src/OpenGl/OpenGl_charexpan.cxx
+++ b/ros/src/OpenGl/OpenGl_charexpan.cxx
@@ -43,7 +43,7 @@ CharacterExpansionFactorAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = k[0]->data.fdata;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_charspace.cxx b/ros/src/OpenGl/OpenGl_charspace.cxx
index 2b20eb0..36a09eb 100755
--- a/ros/src/OpenGl/OpenGl_charspace.cxx
+++ b/ros/src/OpenGl/OpenGl_charspace.cxx
@@ -43,7 +43,7 @@ CharacterSpacingAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = k[0]->data.fdata;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_curve.cxx b/ros/src/OpenGl/OpenGl_curve.cxx
index f03bc4a..eecee3e 100755
--- a/ros/src/OpenGl/OpenGl_curve.cxx
+++ b/ros/src/OpenGl/OpenGl_curve.cxx
@@ -94,7 +94,7 @@ CURVE_VERTICES_ID */
     }
   }
 
-  ((tsm_elem_data)(d.pdata))->pdata = p;
+  d.pdata->pdata = (TSM_ELEM_DATA *)p;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_degmodel.cxx b/ros/src/OpenGl/OpenGl_degmodel.cxx
index 9d0da57..8678389 100755
--- a/ros/src/OpenGl/OpenGl_degmodel.cxx
+++ b/ros/src/OpenGl/OpenGl_degmodel.cxx
@@ -40,7 +40,7 @@ static TStatus DegenerateModelAdd ( TSM_ELEM_DATA d, Tint n, cmn_key* k ) {
   //cmn_memcpy<DEGENERATION> (  p, k[ 0 ] -> data.pdata, 1  );
   memcpy( p, k[ 0 ] -> data.pdata, sizeof(DEGENERATION) );
 
-  ( ( tsm_elem_data )( d.pdata )  ) -> pdata = p;
+  d.pdata-> pdata = (TSM_ELEM_DATA *)p;
 
   return TSuccess;
 
diff --git a/ros/src/OpenGl/OpenGl_depthcue.cxx b/ros/src/OpenGl/OpenGl_depthcue.cxx
index df4e458..fabc09d 100755
--- a/ros/src/OpenGl/OpenGl_depthcue.cxx
+++ b/ros/src/OpenGl/OpenGl_depthcue.cxx
@@ -118,7 +118,7 @@ TelSetDepthCueRep( Tint Wsid, Tint dcid, tel_depthcue dc )
   else if( ws_dcues->num == ws_dcues->siz ) /* insufficient memory */
   {                                           /* realloc */
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-    ws_dcues->data = (TEL_DEPTHCUE_DATA*)realloc( ws_dcues->data, (ws_dcues->siz
+    ws_dcues->data = (TEL_DEPTHCUE_DATA*)__REALLOC__( ws_dcues->data, (ws_dcues->siz
       + GROW_SIZE)*sizeof(TEL_DEPTHCUE_DATA) );
 #else
     ws_dcues->data = cmn_resizemem<TEL_DEPTHCUE_DATA>( ws_dcues->data, ws_dcues->siz
diff --git a/ros/src/OpenGl/OpenGl_edgecol.cxx b/ros/src/OpenGl/OpenGl_edgecol.cxx
index 25e9151..496fb27 100755
--- a/ros/src/OpenGl/OpenGl_edgecol.cxx
+++ b/ros/src/OpenGl/OpenGl_edgecol.cxx
@@ -45,7 +45,7 @@ EdgeColourAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_colour)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_edgewid.cxx b/ros/src/OpenGl/OpenGl_edgewid.cxx
index f306888..d7c38c4 100755
--- a/ros/src/OpenGl/OpenGl_edgewid.cxx
+++ b/ros/src/OpenGl/OpenGl_edgewid.cxx
@@ -45,7 +45,7 @@ EdgeWidthAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = k[0]->data.fdata;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_execstruct.cxx b/ros/src/OpenGl/OpenGl_execstruct.cxx
index 1110024..b7d889f 100755
--- a/ros/src/OpenGl/OpenGl_execstruct.cxx
+++ b/ros/src/OpenGl/OpenGl_execstruct.cxx
@@ -85,6 +85,8 @@ highlighted graphic structures
 #include <InterfaceGraphic_PrimitiveArray.hxx>
 #endif
 
+#include <OpenGl_Memory.hxx>
+
 /*----------------------------------------------------------------------*/
 /*
 * Variables externes
@@ -405,7 +407,7 @@ ExecuteStructureDisplay( TSM_ELEM_DATA data, Tint n, cmn_key *k )
       {
         tsm_trsf_stack new_trsf_stack = NULL;
 
-        new_trsf_stack = (tsm_trsf_stack) malloc (sizeof (TSM_TRSF_STACK));
+        new_trsf_stack = (tsm_trsf_stack) __MALLOC__ (sizeof (TSM_TRSF_STACK));
         cur_trsf_stack->next = new_trsf_stack;
         new_trsf_stack->prev = cur_trsf_stack;
         new_trsf_stack->next = NULL;
@@ -426,7 +428,7 @@ ExecuteStructureDisplay( TSM_ELEM_DATA data, Tint n, cmn_key *k )
 #endif
         cur_trsf_stack = new_trsf_stack->prev;
         cur_trsf_stack->next = NULL;
-        free (new_trsf_stack);
+        __FREE__ (new_trsf_stack);
         break;
       }
     case TelViewIndex:
diff --git a/ros/src/OpenGl/OpenGl_filters.cxx b/ros/src/OpenGl/OpenGl_filters.cxx
index 06f0966..6587d18 100755
--- a/ros/src/OpenGl/OpenGl_filters.cxx
+++ b/ros/src/OpenGl/OpenGl_filters.cxx
@@ -125,7 +125,7 @@ set_filter( Tint n, Tint *ls, Tint *num, Tint *siz, Tint **list )
   else if( *siz < n )
   {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-    *list = (Tint*)realloc( *list, size*sizeof(Tint) );
+    *list = (Tint*)__REALLOC__( *list, size*sizeof(Tint) );
 #else
     *list = cmn_resizemem<Tint>( *list, size );
 #endif
@@ -306,7 +306,7 @@ TglNamesetAdd( Tint  num, Tint *set )
   else if( name_tail->siz < name_tail->num + num )
   {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-    name_tail->ptr = (Tint*)realloc( name_tail->ptr, size*sizeof(Tint) );
+    name_tail->ptr = (Tint*)__REALLOC__( name_tail->ptr, size*sizeof(Tint) );
 #else
     name_tail->ptr = cmn_resizemem<Tint>( name_tail->ptr, size );
 #endif
diff --git a/ros/src/OpenGl/OpenGl_funcs.cxx b/ros/src/OpenGl/OpenGl_funcs.cxx
index b028073..1a09ecf 100755
--- a/ros/src/OpenGl/OpenGl_funcs.cxx
+++ b/ros/src/OpenGl/OpenGl_funcs.cxx
@@ -85,6 +85,9 @@ du triedre .
 #endif
 
 #include <OSD_FontAspect.hxx>
+
+#include <OpenGl_Memory.hxx>
+
 /*----------------------------------------------------------------------*/
 /*
 * Constantes
@@ -1175,7 +1178,7 @@ call_func_redraw_all_structs_begin( Tint wsid )
   * connectees dans la vue <wsid>
   */
   if (trsf_stack == NULL) {
-    trsf_stack = (tsm_trsf_stack) malloc (sizeof (TSM_TRSF_STACK));
+    trsf_stack = (tsm_trsf_stack) __MALLOC__ (sizeof (TSM_TRSF_STACK));
     trsf_stack->next = NULL;
     trsf_stack->prev = NULL;
     matcpy (trsf_stack->LocalTran3, identity);
diff --git a/ros/src/OpenGl/OpenGl_graduatedtrihedron.cxx b/ros/src/OpenGl/OpenGl_graduatedtrihedron.cxx
index ebdfc59..f77f2ca 100755
--- a/ros/src/OpenGl/OpenGl_graduatedtrihedron.cxx
+++ b/ros/src/OpenGl/OpenGl_graduatedtrihedron.cxx
@@ -17,6 +17,8 @@
 #include <OpenGl_tgl_subrs.hxx>
 #include <OpenGl_TextRender.hxx>
 
+#include <OpenGl_Memory.hxx>
+
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -42,7 +44,7 @@ static void copyData(CALL_DEF_GRADUATEDTRIHEDRON* fromData, CALL_DEF_GRADUATEDTR
         len = strlen(fromData->xname) + 1;
     else 
         len = 1;
-    toData->xname = (char*) malloc(len * sizeof(char));
+    toData->xname = (char*) __MALLOC__(len * sizeof(char));
     if (fromData->xname)
         strcpy(toData->xname, fromData->xname);
     else
@@ -52,7 +54,7 @@ static void copyData(CALL_DEF_GRADUATEDTRIHEDRON* fromData, CALL_DEF_GRADUATEDTR
         len = strlen(fromData->yname) + 1;
     else 
         len = 1;
-    toData->yname = (char*) malloc(len * sizeof(char));
+    toData->yname = (char*) __MALLOC__(len * sizeof(char));
     if (fromData->yname)
         strcpy(toData->yname, fromData->yname);
     else
@@ -62,7 +64,7 @@ static void copyData(CALL_DEF_GRADUATEDTRIHEDRON* fromData, CALL_DEF_GRADUATEDTR
         len = strlen(fromData->zname) + 1;
     else 
         len = 1;
-    toData->zname = (char*) malloc(len * sizeof(char));
+    toData->zname = (char*) __MALLOC__(len * sizeof(char));
     if (fromData->zname)
         strcpy(toData->zname, fromData->zname);
     else
@@ -118,7 +120,7 @@ static void copyData(CALL_DEF_GRADUATEDTRIHEDRON* fromData, CALL_DEF_GRADUATEDTR
         len = strlen(fromData->fontOfNames) + 1;
     else 
         len = 1;
-    toData->fontOfNames = (char*) malloc(len * sizeof(char));
+    toData->fontOfNames = (char*) __MALLOC__(len * sizeof(char));
     if (fromData->fontOfNames)
         strcpy(toData->fontOfNames, fromData->fontOfNames);
     else
@@ -132,7 +134,7 @@ static void copyData(CALL_DEF_GRADUATEDTRIHEDRON* fromData, CALL_DEF_GRADUATEDTR
         len = strlen(fromData->fontOfValues) + 1;
     else 
         len = 1;
-    toData->fontOfValues = (char*) malloc(len * sizeof(char));
+    toData->fontOfValues = (char*) __MALLOC__(len * sizeof(char));
     if (fromData->fontOfValues)
         strcpy(toData->fontOfValues, fromData->fontOfValues);
     else
@@ -150,19 +152,19 @@ static void freeGraduatedTrihedronData(CALL_DEF_GRADUATEDTRIHEDRON* data)
 {
     /* Names of axes */
     if (data->xname)
-        free(data->xname); 
+        __FREE__(data->xname); 
     if (data->yname)
-        free(data->yname); 
+        __FREE__(data->yname); 
     if (data->zname)
-        free(data->zname); 
+        __FREE__(data->zname); 
 
     /* Fonts */
     if (data->fontOfNames)
-        free(data->fontOfNames); 
+        __FREE__(data->fontOfNames); 
     if (data->fontOfValues)
-        free(data->fontOfValues); 
+        __FREE__(data->fontOfValues); 
 
-    free(data);
+    __FREE__(data);
 }
 
 static void freeData()
@@ -171,12 +173,12 @@ static void freeData()
 
     if (WsIds)
     {
-        free(WsIds);
+        __FREE__(WsIds);
         for (i = 0; i < nbWsIds; i++)
         {
             freeGraduatedTrihedronData(graduatedTrihedronData[i]);
         }
-        free(graduatedTrihedronData);
+        __FREE__(graduatedTrihedronData);
 
         WsIds = 0;
         graduatedTrihedronData = 0;
@@ -207,11 +209,11 @@ static unsigned char initView(int WsId)
 
     /* Extend arrays for +1 */
     nbWsIds++;
-    newWsIds = (int*) calloc(nbWsIds, sizeof(int));
-    newGraduatedTrihedronData = (CALL_DEF_GRADUATEDTRIHEDRON**) calloc(nbWsIds, sizeof(CALL_DEF_GRADUATEDTRIHEDRON*));
+    newWsIds = (int*) __CALLOC__(nbWsIds, sizeof(int));
+    newGraduatedTrihedronData = (CALL_DEF_GRADUATEDTRIHEDRON**) __CALLOC__(nbWsIds, sizeof(CALL_DEF_GRADUATEDTRIHEDRON*));
     for (i = 0; i < nbWsIds; i++)
     {
-        newGraduatedTrihedronData[i] = (CALL_DEF_GRADUATEDTRIHEDRON*) calloc(1, sizeof(CALL_DEF_GRADUATEDTRIHEDRON));
+        newGraduatedTrihedronData[i] = (CALL_DEF_GRADUATEDTRIHEDRON*) __CALLOC__(1, sizeof(CALL_DEF_GRADUATEDTRIHEDRON));
     }
 
     /* Copy data from current arrays to the newly created */
@@ -261,11 +263,11 @@ static TStatus removeView(int WsId)
 
     /* create new arrays with nbWsIds - 1 length. */
     nbWsIds--;
-    newWsIds = (int*) calloc(nbWsIds, sizeof(int));
-    newGraduatedTrihedronData = (CALL_DEF_GRADUATEDTRIHEDRON**) calloc(nbWsIds, sizeof(CALL_DEF_GRADUATEDTRIHEDRON*));
+    newWsIds = (int*) __CALLOC__(nbWsIds, sizeof(int));
+    newGraduatedTrihedronData = (CALL_DEF_GRADUATEDTRIHEDRON**) __CALLOC__(nbWsIds, sizeof(CALL_DEF_GRADUATEDTRIHEDRON*));
     for (i = 0; i < nbWsIds; i++)
     {
-        newGraduatedTrihedronData[i] = (CALL_DEF_GRADUATEDTRIHEDRON*) calloc(1, sizeof(CALL_DEF_GRADUATEDTRIHEDRON));
+        newGraduatedTrihedronData[i] = (CALL_DEF_GRADUATEDTRIHEDRON*) __CALLOC__(1, sizeof(CALL_DEF_GRADUATEDTRIHEDRON));
     }
 
     /* Copy data from current arrays to the newly created */
@@ -1245,4 +1247,4 @@ TStatus call_graduatedtrihedron_minmaxvalues(const float xMin,
     ymax = yMax;
     zmax = zMax;
     return TSuccess;
-}
\ No newline at end of file
+}
diff --git a/ros/src/OpenGl/OpenGl_highlight.cxx b/ros/src/OpenGl/OpenGl_highlight.cxx
index 89cbcb8..38fa327 100755
--- a/ros/src/OpenGl/OpenGl_highlight.cxx
+++ b/ros/src/OpenGl/OpenGl_highlight.cxx
@@ -109,9 +109,9 @@ TelSetHighlightRep( Tint Wsid, Tint hid, tel_highlight highl )
 #endif
   }
   else if( ws_hlights->num == ws_hlights->siz ) /* insufficient memory */
-  {                                           /* realloc */
+  {                                           /* __REALLOC__ */
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-    ws_hlights->data = (TEL_HIGHLIGHT_DATA*)realloc( ws_hlights->data, (ws_hlights->siz
+    ws_hlights->data = (TEL_HIGHLIGHT_DATA*)__REALLOC__( ws_hlights->data, (ws_hlights->siz
       + GROW_SIZE)*sizeof(TEL_HIGHLIGHT_DATA) );
 #else
     ws_hlights->data = cmn_resizemem<TEL_HIGHLIGHT_DATA>( ws_hlights->data, ws_hlights->siz
diff --git a/ros/src/OpenGl/OpenGl_indexpolygons.cxx b/ros/src/OpenGl/OpenGl_indexpolygons.cxx
index 05ca301..693b3fa 100755
--- a/ros/src/OpenGl/OpenGl_indexpolygons.cxx
+++ b/ros/src/OpenGl/OpenGl_indexpolygons.cxx
@@ -351,7 +351,7 @@ PolygonIndicesAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 #ifdef G003
   data->d.bDraw = new unsigned char[data->num_bounds];
 #endif  /* G003 */
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_intcol.cxx b/ros/src/OpenGl/OpenGl_intcol.cxx
index 2bedcbc..c467b1e 100755
--- a/ros/src/OpenGl/OpenGl_intcol.cxx
+++ b/ros/src/OpenGl/OpenGl_intcol.cxx
@@ -47,7 +47,7 @@ InteriorColourAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_colour)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_lightstate.cxx b/ros/src/OpenGl/OpenGl_lightstate.cxx
index fb819a8..411ea34 100755
--- a/ros/src/OpenGl/OpenGl_lightstate.cxx
+++ b/ros/src/OpenGl/OpenGl_lightstate.cxx
@@ -81,7 +81,7 @@ LightSrcStateAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
   }
   data->num = num;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_localtran3.cxx b/ros/src/OpenGl/OpenGl_localtran3.cxx
index 0705026..b6d20b1 100755
--- a/ros/src/OpenGl/OpenGl_localtran3.cxx
+++ b/ros/src/OpenGl/OpenGl_localtran3.cxx
@@ -50,7 +50,7 @@ LocalTran3Add( TSM_ELEM_DATA d, Tint n, cmn_key *k )
   data->mode = (TComposeType)(k[0]->id);
   matcpy( data->mat, k[0]->data.pdata );
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_mrkr.cxx b/ros/src/OpenGl/OpenGl_mrkr.cxx
index f6edf4d..47d4e73 100755
--- a/ros/src/OpenGl/OpenGl_mrkr.cxx
+++ b/ros/src/OpenGl/OpenGl_mrkr.cxx
@@ -82,7 +82,7 @@ MarkerAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_point)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_mrkrcol.cxx b/ros/src/OpenGl/OpenGl_mrkrcol.cxx
index cc53f8f..cb2e83c 100755
--- a/ros/src/OpenGl/OpenGl_mrkrcol.cxx
+++ b/ros/src/OpenGl/OpenGl_mrkrcol.cxx
@@ -47,7 +47,7 @@ PolymarkerColourAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_colour)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_mrkrset.cxx b/ros/src/OpenGl/OpenGl_mrkrset.cxx
index 485bb5c..dd5c46b 100755
--- a/ros/src/OpenGl/OpenGl_mrkrset.cxx
+++ b/ros/src/OpenGl/OpenGl_mrkrset.cxx
@@ -93,7 +93,7 @@ MarkerSetAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
   }
   data->num = num;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_mrkrsize.cxx b/ros/src/OpenGl/OpenGl_mrkrsize.cxx
index ec3b931..30a2979 100755
--- a/ros/src/OpenGl/OpenGl_mrkrsize.cxx
+++ b/ros/src/OpenGl/OpenGl_mrkrsize.cxx
@@ -45,7 +45,7 @@ PolymarkerSizeAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = k[0]->data.fdata;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_pick.cxx b/ros/src/OpenGl/OpenGl_pick.cxx
index f1ee3c3..b6f1a60 100755
--- a/ros/src/OpenGl/OpenGl_pick.cxx
+++ b/ros/src/OpenGl/OpenGl_pick.cxx
@@ -59,12 +59,12 @@ allocate( Tint *cur_size, Tint size_reqd, void **arr, Tint elem_size )
   size_reqd = ( ( size_reqd / ARRAY_GROW_SIZE ) + 1 ) * ARRAY_GROW_SIZE;
 
   if( !( *cur_size ) ) {
-    *arr = malloc( size_reqd * elem_size );
+    *arr = __MALLOC__( size_reqd * elem_size );
     memset( *arr, 0, size_reqd * elem_size );
   }
   else
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)    
-    *arr = realloc( *arr, size_reqd * elem_size );
+    *arr = __REALLOC__( *arr, size_reqd * elem_size );
 #else
     *arr = (void*)cmn_resizemem<char>( (char*)*arr, size_reqd * elem_size );
 #endif
diff --git a/ros/src/OpenGl/OpenGl_polygon.cxx b/ros/src/OpenGl/OpenGl_polygon.cxx
index 31164e6..638c1f3 100755
--- a/ros/src/OpenGl/OpenGl_polygon.cxx
+++ b/ros/src/OpenGl/OpenGl_polygon.cxx
@@ -313,7 +313,7 @@ PolygonAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
       fnormal.xyz[2]*data->fnormal.xyz[2];
     if( sens < 0. ) data->reverse_order = GL_TRUE;
   }
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   /* s'il n'est pas convexe, le polygone est triangule de la meme maniere
   que les polygones a trous */
@@ -557,7 +557,7 @@ out_bgntmesh( GLenum triangle_type )
     else
     {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      dis->seq = (SEQ_*)realloc( dis->seq, dis->num_alloc*sizeof(SEQ_) );
+      dis->seq = (SEQ_*)__REALLOC__( dis->seq, dis->num_alloc*sizeof(SEQ_) );
 #else
       dis->seq = cmn_resizemem<SEQ_>( dis->seq, dis->num_alloc );
 #endif
@@ -597,7 +597,7 @@ out_vert1( void *data )
     else
     {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      s->tmesh_sequence = (void**)realloc( s->tmesh_sequence, s->ts_alloc*sizeof(void*));
+      s->tmesh_sequence = (void**)__REALLOC__( s->tmesh_sequence, s->ts_alloc*sizeof(void*));
 #else
       s->tmesh_sequence = cmn_resizemem<void*>( s->tmesh_sequence, s->ts_alloc);
 #endif
@@ -691,7 +691,7 @@ out_vert3( void *data )
     else
     {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      s->tmesh_sequence = (void**)realloc( s->tmesh_sequence,
+      s->tmesh_sequence = (void**)__REALLOC__( s->tmesh_sequence,
         s->ts_alloc*sizeof(void*) );
 #else
       s->tmesh_sequence = cmn_resizemem<void*>( s->tmesh_sequence,
@@ -724,7 +724,7 @@ mycombine( GLdouble coords[3], int *data, GLfloat w[4],  void **dataout)
 {
   extra_vertex  new_vertex;
 
-  new_vertex =  (extra_vertex) malloc(sizeof(EXTRA_VERTEX));
+  new_vertex =  (extra_vertex) __MALLOC__(sizeof(EXTRA_VERTEX));
 
   new_vertex->vert[0] = ( float )coords[0];
   new_vertex->vert[1] = ( float )coords[1];
@@ -980,7 +980,7 @@ PolygonDelete( TSM_ELEM_DATA data, Tint n, cmn_key *k )
       if(p->display->seq[i].tmesh_sequence) {
         for ( j = 0; j < p->display->seq[i].ts_num ; j++ ) {
           if ( p->display->seq[i].tmesh_sequence[j] >= (void *)0xffff )
-            free(p->display->seq[i].tmesh_sequence[j]);
+            __FREE__(p->display->seq[i].tmesh_sequence[j]);
         }
       }
       delete[] p->display->seq[i].tmesh_sequence;
diff --git a/ros/src/OpenGl/OpenGl_polygonholes.cxx b/ros/src/OpenGl/OpenGl_polygonholes.cxx
index 71d29e9..cb667dc 100755
--- a/ros/src/OpenGl/OpenGl_polygonholes.cxx
+++ b/ros/src/OpenGl/OpenGl_polygonholes.cxx
@@ -284,7 +284,7 @@ PolygonHolesAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
     vecnrm( data->fnormal.xyz );
 #endif
   }
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
@@ -639,7 +639,7 @@ PolygonHolesDelete( TSM_ELEM_DATA data, Tint n, cmn_key *k )
       if( p->display->seq[i].tmesh_sequence ) {
         for ( j = 0; j < p->display->seq[i].ts_num ; j++ ) {
           if ( p->display->seq[i].tmesh_sequence[j]  >= (void *)0xffff )
-            free(p->display->seq[i].tmesh_sequence[j]);
+            __FREE__(p->display->seq[i].tmesh_sequence[j]);
         }
       }
       delete[] p->display->seq[i].tmesh_sequence;
@@ -979,7 +979,7 @@ out_bgntmesh_1 ( GLenum triangle_type )
     else
     {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      dis->seq = (SEQ_*)realloc( dis->seq, dis->num_alloc*sizeof(SEQ_) );
+      dis->seq = (SEQ_*)__REALLOC__( dis->seq, dis->num_alloc*sizeof(SEQ_) );
 #else
       dis->seq = cmn_resizemem<SEQ_>( dis->seq, dis->num_alloc );
 #endif
@@ -1012,7 +1012,7 @@ out_vertex1( void *data )
     else
     {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      s->tmesh_sequence = (void**)realloc( s->tmesh_sequence,
+      s->tmesh_sequence = (void**)__REALLOC__( s->tmesh_sequence,
         s->ts_alloc*sizeof(void*));
 #else
       s->tmesh_sequence = cmn_resizemem<void*>( s->tmesh_sequence,
@@ -1053,7 +1053,7 @@ out_vertex2( void *data )
     else
     {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      s->tmesh_sequence = (void**)realloc( s->tmesh_sequence,
+      s->tmesh_sequence = (void**)__REALLOC__( s->tmesh_sequence,
         s->ts_alloc*sizeof(void*) );
 #else
       s->tmesh_sequence = cmn_resizemem<void*>( s->tmesh_sequence,
@@ -1096,7 +1096,7 @@ out_vertex3( void *data )
     else
     {
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)
-      s->tmesh_sequence = (void**)realloc( s->tmesh_sequence,
+      s->tmesh_sequence = (void**)__REALLOC__( s->tmesh_sequence,
         s->ts_alloc*sizeof(void*) );
 #else
       s->tmesh_sequence = cmn_resizemem<void*>( s->tmesh_sequence,
@@ -1127,7 +1127,7 @@ out_combine( GLdouble coords[3], int *data,
 {
   extra_vertex  new_vertex;
 
-  new_vertex =  (extra_vertex) malloc(sizeof(EXTRA_VERTEX));
+  new_vertex =  (extra_vertex) __MALLOC__(sizeof(EXTRA_VERTEX));
 
   new_vertex->vert[0] = ( float )coords[0];
   new_vertex->vert[1] = ( float )coords[1];
diff --git a/ros/src/OpenGl/OpenGl_polygonoffset.cxx b/ros/src/OpenGl/OpenGl_polygonoffset.cxx
index 26e21f2..247f5a2 100755
--- a/ros/src/OpenGl/OpenGl_polygonoffset.cxx
+++ b/ros/src/OpenGl/OpenGl_polygonoffset.cxx
@@ -48,7 +48,7 @@ PolygonOffsetAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_poffset_param)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_polyl.cxx b/ros/src/OpenGl/OpenGl_polyl.cxx
index 5787ae7..c0e035d 100755
--- a/ros/src/OpenGl/OpenGl_polyl.cxx
+++ b/ros/src/OpenGl/OpenGl_polyl.cxx
@@ -139,7 +139,7 @@ PolylineAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
     }
   }
 
-  ((tsm_elem_data)(d.pdata))->pdata = p;
+  d.pdata->pdata = (TSM_ELEM_DATA *)p;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_polylcol.cxx b/ros/src/OpenGl/OpenGl_polylcol.cxx
index 5606fd0..f0ef6c5 100755
--- a/ros/src/OpenGl/OpenGl_polylcol.cxx
+++ b/ros/src/OpenGl/OpenGl_polylcol.cxx
@@ -46,7 +46,7 @@ PolylineColourAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_colour)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_polylwid.cxx b/ros/src/OpenGl/OpenGl_polylwid.cxx
index eb278ea..6b6cd73 100755
--- a/ros/src/OpenGl/OpenGl_polylwid.cxx
+++ b/ros/src/OpenGl/OpenGl_polylwid.cxx
@@ -47,7 +47,7 @@ PolylineWidthAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = k[0]->data.fdata;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_qstrip.cxx b/ros/src/OpenGl/OpenGl_qstrip.cxx
index b2ac5f5..121d31e 100755
--- a/ros/src/OpenGl/OpenGl_qstrip.cxx
+++ b/ros/src/OpenGl/OpenGl_qstrip.cxx
@@ -405,7 +405,7 @@ QuadrangleAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
   data -> d.skipRatio =  0.0F;
   data->d.bDraw = new unsigned char[nv];
 #endif  /* G003 */
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_remnames.cxx b/ros/src/OpenGl/OpenGl_remnames.cxx
index 088f3e7..bfe0165 100755
--- a/ros/src/OpenGl/OpenGl_remnames.cxx
+++ b/ros/src/OpenGl/OpenGl_remnames.cxx
@@ -58,7 +58,7 @@ RemoveNamesetAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
   }
   data->num = num;
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_subrs.cxx b/ros/src/OpenGl/OpenGl_subrs.cxx
index 28c947f..9eeab78 100755
--- a/ros/src/OpenGl/OpenGl_subrs.cxx
+++ b/ros/src/OpenGl/OpenGl_subrs.cxx
@@ -1330,7 +1330,7 @@ call_subr_structure_exploration( Tint             Id,
 
     if( type == CALL_PHIGS_ELEM_LABEL )
     {
-      buffer = (Tchar *)malloc( CALL_ );
+      buffer = (Tchar *)__MALLOC__( CALL_ );
       TelInqCurElemContent( CALL_, buffer, &actual_size, &data );
 
       if( data.idata == LabelBegin )
@@ -1362,7 +1362,7 @@ call_subr_structure_exploration( Tint             Id,
       if( data.idata == LabelEnd )
         dump = 0;
 
-      free( buffer );
+      __FREE__( buffer );
     }
 
     if( dump )
diff --git a/ros/src/OpenGl/OpenGl_surfprop.cxx b/ros/src/OpenGl/OpenGl_surfprop.cxx
index a520bda..657ae7a 100755
--- a/ros/src/OpenGl/OpenGl_surfprop.cxx
+++ b/ros/src/OpenGl/OpenGl_surfprop.cxx
@@ -48,7 +48,7 @@ SurfaceAreaPropertiesAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_surf_prop)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_text.cxx b/ros/src/OpenGl/OpenGl_text.cxx
index 329215a..df116b8 100755
--- a/ros/src/OpenGl/OpenGl_text.cxx
+++ b/ros/src/OpenGl/OpenGl_text.cxx
@@ -155,7 +155,7 @@ TextAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
   data->length    = i;
   memcpy( data->data, str, i );
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_textalignment.cxx b/ros/src/OpenGl/OpenGl_textalignment.cxx
index 44792b5..e757417 100755
--- a/ros/src/OpenGl/OpenGl_textalignment.cxx
+++ b/ros/src/OpenGl/OpenGl_textalignment.cxx
@@ -54,7 +54,7 @@ TextAlignAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_align_data)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_textcol.cxx b/ros/src/OpenGl/OpenGl_textcol.cxx
index d486b5e..66d04ff 100755
--- a/ros/src/OpenGl/OpenGl_textcol.cxx
+++ b/ros/src/OpenGl/OpenGl_textcol.cxx
@@ -81,7 +81,7 @@ TextColourAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_colour)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_textcolsubtitle.cxx b/ros/src/OpenGl/OpenGl_textcolsubtitle.cxx
index 5dea8ce..b0e30b2 100755
--- a/ros/src/OpenGl/OpenGl_textcolsubtitle.cxx
+++ b/ros/src/OpenGl/OpenGl_textcolsubtitle.cxx
@@ -78,7 +78,7 @@ TextColourSubTitleAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_colour)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_textfont.cxx b/ros/src/OpenGl/OpenGl_textfont.cxx
index 9a20fe9..cf8145a 100755
--- a/ros/src/OpenGl/OpenGl_textfont.cxx
+++ b/ros/src/OpenGl/OpenGl_textfont.cxx
@@ -59,7 +59,7 @@ TelTextFontInitClass( TelType *el )
 static  TStatus
 TextFontAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 {
-  ((tsm_elem_data)(d.pdata))->pdata = k[0]->data.pdata;
+  d.pdata->pdata = (TSM_ELEM_DATA *)k[0]->data.pdata;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_textheight.cxx b/ros/src/OpenGl/OpenGl_textheight.cxx
index da529ed..f0043af 100755
--- a/ros/src/OpenGl/OpenGl_textheight.cxx
+++ b/ros/src/OpenGl/OpenGl_textheight.cxx
@@ -94,7 +94,7 @@ TextHeightAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 #endif  /* WNT */
 #endif  /* BUC60821 */
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_tmesh.cxx b/ros/src/OpenGl/OpenGl_tmesh.cxx
index f664780..e7c7a55 100755
--- a/ros/src/OpenGl/OpenGl_tmesh.cxx
+++ b/ros/src/OpenGl/OpenGl_tmesh.cxx
@@ -337,7 +337,7 @@ VTEXTURECOORD_ID */
   data -> d.skipRatio =  0.0F;
   data->d.bDraw = new unsigned char[data->num_facets + 2];
 #endif  /* G003 */
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_togl_begin_layer_mode.cxx b/ros/src/OpenGl/OpenGl_togl_begin_layer_mode.cxx
index 438b2e9..3bd85b3 100755
--- a/ros/src/OpenGl/OpenGl_togl_begin_layer_mode.cxx
+++ b/ros/src/OpenGl/OpenGl_togl_begin_layer_mode.cxx
@@ -58,6 +58,8 @@ HISTORIQUE DES MODIFICATIONS   :
 
 #include <OpenGl_Extension.hxx>
 
+#include <OpenGl_Memory.hxx>
+
 /*----------------------------------------------------------------------*/
 /*
 * Constantes
@@ -139,7 +141,7 @@ call_togl_layer2d
 #ifdef PRINT
   printf ("call_togl_layer2d\n");
 #endif
-  alayer->ptrLayer = (call_def_ptrLayer) malloc (sizeof (CALL_DEF_PTRLAYER)); 
+  alayer->ptrLayer = (call_def_ptrLayer) __MALLOC__ (sizeof (CALL_DEF_PTRLAYER)); 
   alayer->ptrLayer->listIndex = glGenLists (1);
   ACLayer = *alayer;
 }
diff --git a/ros/src/OpenGl/OpenGl_togl_markercontextgroup.cxx b/ros/src/OpenGl/OpenGl_togl_markercontextgroup.cxx
index 2fe77d3..da82257 100755
--- a/ros/src/OpenGl/OpenGl_togl_markercontextgroup.cxx
+++ b/ros/src/OpenGl/OpenGl_togl_markercontextgroup.cxx
@@ -29,6 +29,8 @@ xx-xx-xx : xxx ; Creation.
 #include <OpenGl_tgl_subrs.hxx>
 #include <OpenGl_tgl_utilgr.hxx>
 
+#include <OpenGl_Memory.hxx>
+
 /*----------------------------------------------------------------------*/
 
 /*--------------------------------generate USERDEFINED marker--------begin-------*/
@@ -80,13 +82,13 @@ int EXPORT GenerateMarkerBitmap( int theId, unsigned int theWidth, unsigned int
     anIndex = UDMS_Marker.Quantity;
     if( anIndex == 0 )
     {
-      UDMS_Marker.IdList = (int*)malloc( sizeof( int ) );
-      UDMS_Marker.DisplayIdList = (GLuint*)malloc( sizeof( GLuint ) );
+      UDMS_Marker.IdList = (int*)__MALLOC__( sizeof( int ) );
+      UDMS_Marker.DisplayIdList = (GLuint*)__MALLOC__( sizeof( GLuint ) );
     }
     else
     {
-      UDMS_Marker.IdList = (int*) realloc( UDMS_Marker.IdList, (UDMS_Marker.Quantity + 1)*sizeof( int ) );
-      UDMS_Marker.DisplayIdList = (GLuint*) realloc( UDMS_Marker.DisplayIdList, (UDMS_Marker.Quantity + 1)*sizeof( GLuint ) );
+      UDMS_Marker.IdList = (int*) __REALLOC__( UDMS_Marker.IdList, (UDMS_Marker.Quantity + 1)*sizeof( int ) , UDMS_Marker.Quantity*sizeof( int ));
+      UDMS_Marker.DisplayIdList = (GLuint*) __REALLOC__( UDMS_Marker.DisplayIdList, (UDMS_Marker.Quantity + 1)*sizeof( GLuint ), UDMS_Marker.Quantity*sizeof( GLuint ) );
     }
     UDMS_Marker.Quantity++;    
   } 
diff --git a/ros/src/OpenGl/OpenGl_togl_print.cxx b/ros/src/OpenGl/OpenGl_togl_print.cxx
index ed55b8f..f6eeaa4 100755
--- a/ros/src/OpenGl/OpenGl_togl_print.cxx
+++ b/ros/src/OpenGl/OpenGl_togl_print.cxx
@@ -227,7 +227,7 @@ call_togl_print
     ZeroMemory(pBMI, sizeof(*pBMI));
     bmiSize = sizeof(*pBMI);
 
-    pBMI = (BITMAPINFO *) calloc(1, bmiSize);
+    pBMI = (BITMAPINFO *) __CALLOC__(1, bmiSize);
     bmHeader = &pBMI->bmiHeader;
 
     bmHeader->biSize = sizeof(*bmHeader);
@@ -248,8 +248,8 @@ call_togl_print
     hBmOld = SelectObject(hMemDC, hBm);
 
     // Release Memory   
-    free(pBMI);
-    //    free(bmHeader);
+    __FREE__(pBMI);
+    //    __FREE__(bmHeader);
 
     // further initialization
 #ifdef mydebug
diff --git a/ros/src/OpenGl/OpenGl_togl_texture.cxx b/ros/src/OpenGl/OpenGl_togl_texture.cxx
index ed810b7..b103e69 100755
--- a/ros/src/OpenGl/OpenGl_togl_texture.cxx
+++ b/ros/src/OpenGl/OpenGl_togl_texture.cxx
@@ -36,6 +36,8 @@ Ajout coupure du texture mapping
 #include <OpenGl_tsm.hxx>
 #include <OpenGl_tsm_ws.hxx>
 
+#include <OpenGl_Memory.hxx>
+
 #ifdef OCC1188
 #include <GL/glu.h>
 #endif
@@ -178,7 +180,7 @@ void EXPORT call_togl_create_bg_texture( CALL_DEF_VIEW* view, int width, int hei
   CMN_KEY_DATA  cmnData;
   CMN_KEY_DATA  cmnKey;
   GLuint texture = 0;
-  GLubyte *image = (GLubyte *)malloc(width * height * 3 * sizeof(GLubyte));
+  GLubyte *image = (GLubyte *)__MALLOC__(width * height * 3 * sizeof(GLubyte));
   memcpy( image, data, ( width * height * 3 ) );
 
   /* check if some bg texture is already created */
@@ -221,7 +223,7 @@ void EXPORT call_togl_create_bg_texture( CALL_DEF_VIEW* view, int width, int hei
   /* storing background texture */
   cmnData.pdata = &tex;
   TsmSetWSAttri( view->WsId, WSBgTexture, &cmnData );
-  free( image );
+  __FREE__( image );
 }
 
 /*----------------------------------------------------------------------*/
diff --git a/ros/src/OpenGl/OpenGl_transform_persistence.cxx b/ros/src/OpenGl/OpenGl_transform_persistence.cxx
index 9312cfd..0a15e7c 100755
--- a/ros/src/OpenGl/OpenGl_transform_persistence.cxx
+++ b/ros/src/OpenGl/OpenGl_transform_persistence.cxx
@@ -75,7 +75,7 @@ TransformPersistenceAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
 
   *data = *(tel_transform_persistence)(k[0]->data.pdata);
 
-  ((tsm_elem_data)(d.pdata))->pdata = data;
+  d.pdata->pdata = (TSM_ELEM_DATA *)data;
 
   return TSuccess;
 }
diff --git a/ros/src/OpenGl/OpenGl_triedron.cxx b/ros/src/OpenGl/OpenGl_triedron.cxx
index 682470b..9ac34d6 100755
--- a/ros/src/OpenGl/OpenGl_triedron.cxx
+++ b/ros/src/OpenGl/OpenGl_triedron.cxx
@@ -70,6 +70,9 @@ from higher API */
 #endif
 
 #include <OpenGl_TextRender.hxx>
+
+#include <OpenGl_Memory.hxx>
+
 /*----------------------------------------------------------------------*/
 /*
 * Constantes
@@ -184,14 +187,14 @@ static int find_nz_wks(int NZWksID, int alloc)
 #ifdef BUC60851
     if( nz_wks_size > 0 ) {
       nz_wks_size += GROW_SIZE_NZ_WKS;
-      nz_wks =  (NZ_WKS *) realloc(nz_wks, nz_wks_size * sizeof(NZ_WKS)); 
+      nz_wks =  (NZ_WKS *) __REALLOC__(nz_wks, nz_wks_size * sizeof(NZ_WKS), (nz_wks_size - GROW_SIZE_NZ_WKS) * sizeof(NZ_WKS)); 
     } else {
       nz_wks_size = GROW_SIZE_NZ_WKS;
-      nz_wks = (NZ_WKS *) malloc(nz_wks_size * sizeof(NZ_WKS));
+      nz_wks = (NZ_WKS *) __MALLOC__(nz_wks_size * sizeof(NZ_WKS));
     }
 #else
     nz_wks_size += GROW_SIZE_NZ_WKS;
-    nz_wks =  (NZ_WKS *) realloc(nz_wks, nz_wks_size * sizeof(NZ_WKS));
+    nz_wks =  (NZ_WKS *) __REALLOC__(nz_wks, nz_wks_size * sizeof(NZ_WKS));
 #endif
     if (nz_wks == NULL) return -1;
   }
@@ -231,16 +234,17 @@ static int find_nz_struc(int NZWksIdx, int NZStrucID, int alloc)
     if( nz_wks[NZWksIdx].nz_struc_size > 0 ) {
       nz_wks[NZWksIdx].nz_struc_size += GROW_SIZE_NZ_STRUC;
       nz_wks[NZWksIdx].nz_struc = 
-        (NZ_STRUC_DATA *)  realloc(nz_wks[NZWksIdx].nz_struc, 
-        nz_wks[NZWksIdx].nz_struc_size * sizeof(NZ_STRUC_DATA));
+        (NZ_STRUC_DATA *)  __REALLOC__(nz_wks[NZWksIdx].nz_struc, 
+        nz_wks[NZWksIdx].nz_struc_size * sizeof(NZ_STRUC_DATA),
+        nz_wks[NZWksIdx].nz_struc_size - GROW_SIZE_NZ_STRUC);
     } else {
       nz_wks[NZWksIdx].nz_struc_size = GROW_SIZE_NZ_STRUC;
       nz_wks[NZWksIdx].nz_struc = 
-        (NZ_STRUC_DATA *)  malloc( nz_wks[NZWksIdx].nz_struc_size * sizeof(NZ_STRUC_DATA));
+        (NZ_STRUC_DATA *)  __MALLOC__( nz_wks[NZWksIdx].nz_struc_size * sizeof(NZ_STRUC_DATA));
     }
 #else
     nz_wks[NZWksIdx].nz_struc_size += GROW_SIZE_NZ_STRUC;
-    nz_wks[NZWksIdx].nz_struc = (NZ_STRUC_DATA *)  realloc(nz_wks[NZWksIdx].nz_struc, nz_wks[NZWksIdx].nz_struc_size * sizeof(NZ_STRUC_DATA));
+    nz_wks[NZWksIdx].nz_struc = (NZ_STRUC_DATA *)  __REALLOC__(nz_wks[NZWksIdx].nz_struc, nz_wks[NZWksIdx].nz_struc_size * sizeof(NZ_STRUC_DATA));
 #endif
     if (nz_wks[NZWksIdx].nz_struc == NULL) return -1;
 
@@ -609,7 +613,7 @@ TStatus call_triedron_redraw (
       glEnable(GL_CLIP_PLANE0 + ii);
     }
   } 
-  free(isPlaneActive);
+  __FREE__(isPlaneActive);
 
 #endif
 
@@ -1126,7 +1130,7 @@ TStatus call_zbuffer_triedron_redraw (
       glEnable(GL_CLIP_PLANE0 + i);
     }
   }
-  free(isPlaneActive);
+  __FREE__(isPlaneActive);
 #endif
 
   if (!isWithinView) { /* restore matrix */
@@ -1433,15 +1437,15 @@ TStatus call_triedron_erase (
   /* s'il existe via une variable nz_struc_entry ).                      */
   for (i = 0; i < nz_wks[nz_wks_entry].nz_struc_count; i++) {
     if (nz_wks[nz_wks_entry].nz_struc[i].aZBufParam != NULL) 
-      free(nz_wks[nz_wks_entry].nz_struc[i].aZBufParam);
+      __FREE__(nz_wks[nz_wks_entry].nz_struc[i].aZBufParam);
   }
 
   if (nz_wks[nz_wks_entry].nz_struc != NULL) {
-    free(nz_wks[nz_wks_entry].nz_struc);
+    __FREE__(nz_wks[nz_wks_entry].nz_struc);
   }
 
   if (nz_wks_count == 1) {
-    free(nz_wks);
+    __FREE__(nz_wks);
     nz_wks_count = 0;
     nz_wks_size = 0;
   }
diff --git a/ros/src/OpenGl/OpenGl_tsm.cxx b/ros/src/OpenGl/OpenGl_tsm.cxx
index 7b8a96f..2c46c53 100755
--- a/ros/src/OpenGl/OpenGl_tsm.cxx
+++ b/ros/src/OpenGl/OpenGl_tsm.cxx
@@ -410,7 +410,7 @@ TsmDeleteElement()
   /* Decrement the no of elements */
   context.s->elemListHead.header.num--;
 
-  /* free the linked list node */
+  /* __FREE__ the linked list node */
   delete node;
 
   return TSuccess;
diff --git a/ros/src/OpenGl/OpenGl_view.cxx b/ros/src/OpenGl/OpenGl_view.cxx
index 0360916..861d3e3 100755
--- a/ros/src/OpenGl/OpenGl_view.cxx
+++ b/ros/src/OpenGl/OpenGl_view.cxx
@@ -1340,8 +1340,8 @@ TelClearBackground( Tint  Wsid /* Workstation id */ )
     Tfloat* corner2 = 0;/*  1,-1*/
     Tfloat* corner3 = 0;/*  1, 1*/
     Tfloat* corner4 = 0;/* -1, 1*/
-    Tfloat* dcorner1 = (Tfloat*)malloc(3*sizeof(Tfloat));
-    Tfloat* dcorner2 = (Tfloat*)malloc(3*sizeof(Tfloat));
+    Tfloat* dcorner1 = (Tfloat*)__MALLOC__(3*sizeof(Tfloat));
+    Tfloat* dcorner2 = (Tfloat*)__MALLOC__(3*sizeof(Tfloat));
 
     int upset[3] = {0} ;
 
@@ -1484,8 +1484,8 @@ TelClearBackground( Tint  Wsid /* Workstation id */ )
     glPopMatrix();
     glMatrixMode( GL_MODELVIEW );
 
-    free(dcorner1);
-    free(dcorner2);
+    __FREE__(dcorner1);
+    __FREE__(dcorner2);
     dcorner1 = 0;
     dcorner2 = 0;
 
diff --git a/ros/src/VoxelClient/VoxelClient_VisDrawer.cxx b/ros/src/VoxelClient/VoxelClient_VisDrawer.cxx
index 01944b0..b90ac97 100755
--- a/ros/src/VoxelClient/VoxelClient_VisDrawer.cxx
+++ b/ros/src/VoxelClient/VoxelClient_VisDrawer.cxx
@@ -35,7 +35,7 @@ TStatus VisAdd(TSM_ELEM_DATA d, Tint n, cmn_key * k)
     // Create the handler
     VoxelClient_VisDrawer *handler = new VoxelClient_VisDrawer(userdata);
 
-    ((tsm_elem_data) (d.pdata))->pdata = (void *) handler;
+    d.pdata->pdata = (TSM_ELEM_DATA *)handler;
 
     // Evaluate minmax if needed
     if(userdraw->Bounds)
