diff --git a/base/inc/TStorage.h b/base/inc/TStorage.h
index 6f8fa586fb5eec7ac90ad11c62bddb6d779fef45..daae4262abe8b91bb6a88bc9dbc21a8da307dd3e 100644
--- a/base/inc/TStorage.h
+++ b/base/inc/TStorage.h
@@ -1,4 +1,4 @@
-// @(#)root/base:$Name$:$Id$
+// @(#)root/base:$Name:  $:$Id: TStorage.h,v 1.1.1.1 2000/05/16 17:00:39 rdm Exp $
 // Author: Fons Rademakers   29/07/95
 
 /*************************************************************************
@@ -52,6 +52,8 @@ public:
    static void         *ReAlloc(void *vp, size_t size, size_t oldsize);
    static void         *ObjectAlloc(size_t size);
    static void         *ObjectAlloc(size_t size, void *vp);
+   static void          ObjectDealloc(void *vp);
+   static void          ObjectDealloc(void *vp, void *ptr);
 
    static void EnterStat(size_t size, void *p);
    static void RemoveStat(void *p);
diff --git a/base/src/TObject.cxx b/base/src/TObject.cxx
index 97401a171e08a6e6bfcdd1a5736d3676795f17be..9afe7475ea28aed70931df4fde08737a8e33ea0b 100644
--- a/base/src/TObject.cxx
+++ b/base/src/TObject.cxx
@@ -1,4 +1,4 @@
-// @(#)root/base:$Name:  $:$Id: TObject.cxx,v 1.2 2000/05/24 10:31:47 brun Exp $
+// @(#)root/base:$Name:  $:$Id: TObject.cxx,v 1.3 2000/07/29 10:54:23 rdm Exp $
 // Author: Rene Brun   26/12/94
 
 /*************************************************************************
@@ -990,7 +990,7 @@ void TObject::SetDtorOnly(void *obj)
 void TObject::operator delete(void *ptr)
 {
    if ((Long_t) ptr != fgDtorOnly)
-      ::operator delete(ptr);
+      TStorage::ObjectDealloc(ptr);
    else
       fgDtorOnly = 0;
 }
@@ -1001,6 +1001,6 @@ void TObject::operator delete(void *ptr, void *vp)
 {
    // Only called by placement new when throwing an exception.
 
-   if (ptr && vp) { }
+   TStorage::ObjectDealloc(ptr, vp);
 }
 #endif
diff --git a/base/src/TStorage.cxx b/base/src/TStorage.cxx
index 5acbe3ba2fff2052dc6b1c6576f8cb87cc0716ff..4cb9cac65351b3ffb9ab41b97cee04f67fab001b 100644
--- a/base/src/TStorage.cxx
+++ b/base/src/TStorage.cxx
@@ -1,4 +1,4 @@
-// @(#)root/base:$Name:  $:$Id: TStorage.cxx,v 1.1.1.1 2000/05/16 17:00:39 rdm Exp $
+// @(#)root/base:$Name:  $:$Id: TStorage.cxx,v 1.2 2000/06/09 14:56:44 rdm Exp $
 // Author: Fons Rademakers   29/07/95
 
 /*************************************************************************
@@ -15,7 +15,7 @@
 //                                                                      //
 // Storage manager. The storage manager works best in conjunction with  //
 // the custom ROOT new and delete operators defined in the file         //
-// NEW_NewDelete.cxx (libNew.so). Only when using the custom allocation //
+// NewDelete.cxx (libNew.so). Only when using the custom allocation     //
 // operators will memory usage statistics be gathered using the         //
 // TStorage EnterStat(), RemoveStat(), etc. functions.                  //
 // Memory checking is by default enabled (when using libNew.so) and     //
@@ -148,19 +148,19 @@ void *TStorage::ReAlloc(void *ovp, size_t size)
 
    static const char *where = "TStorage::ReAlloc";
 
-   char *vp;
+   void *vp;
    if (ovp == 0) {
-      vp = new char [size];
+      vp = ::operator new(size);
       if (vp == 0)
          Fatal(where, spaceErr);
       return vp;
    }
 
-   vp = new char [size];
+   vp = ::operator new(size);
    if (vp == 0)
       Fatal(where, spaceErr);
    memmove(vp, ovp, size);
-   delete [] (char *) ovp;
+   ::operator delete(ovp);
    return vp;
 }
 
@@ -175,9 +175,9 @@ void *TStorage::ReAlloc(void *ovp, size_t size, size_t oldsize)
 
    static const char *where = "TStorage::ReAlloc";
 
-   char *vp;
+   void *vp;
    if (ovp == 0) {
-     vp = new char [size];
+     vp = ::operator new(size);
      if (vp == 0)
         Fatal(where, spaceErr);
      return vp;
@@ -185,26 +185,27 @@ void *TStorage::ReAlloc(void *ovp, size_t size, size_t oldsize)
    if (oldsize == size)
       return ovp;
 
-   vp = new char [size];
+   vp = ::operator new(size);
    if (vp == 0)
       Fatal(where, spaceErr);
    if (size > oldsize) {
       memcpy(vp, ovp, oldsize);
-      memset(vp+oldsize, 0, size-oldsize);
+      memset((char*)vp+oldsize, 0, size-oldsize);
    } else
       memcpy(vp, ovp, size);
-   delete [] (char *) ovp;
+   ::operator delete(ovp);
    return vp;
 }
 
 //______________________________________________________________________________
 void *TStorage::ObjectAlloc(size_t sz)
 {
-   // Used to allocate a TObject on the heap (via TObject::new()). Directly
-   // after this routine one can call (in the TObject ctor) TStorage::IsOnHeap()
-   // to find out if the just created object is on the heap.
+   // Used to allocate a TObject on the heap (via TObject::operator new()).
+   // Directly after this routine one can call (in the TObject ctor)
+   // TStorage::IsOnHeap() to find out if the just created object is on
+   // the heap.
 
-   ULong_t space = (ULong_t) new char[sz];
+   ULong_t space = (ULong_t) ::operator new(sz);
    AddToHeap(space, space+sz);
    return (void*) space;
 }
@@ -212,13 +213,29 @@ void *TStorage::ObjectAlloc(size_t sz)
 //______________________________________________________________________________
 void *TStorage::ObjectAlloc(size_t , void *vp)
 {
-   // Used to allocate a TObject on the heap (via TObject::new(size_t,void*))
+   // Used to allocate a TObject on the heap (via TObject::operator new(size_t,void*))
    // in position vp. vp is already allocated (maybe on heap, maybe on
    // stack) so just return.
 
    return vp;
 }
 
+//______________________________________________________________________________
+void TStorage::ObjectDealloc(void *vp)
+{
+   // Used to deallocate a TObject on the heap (via TObject::operator delete()).
+
+   ::operator delete(vp);
+}
+
+//______________________________________________________________________________
+void TStorage::ObjectDealloc(void *vp, void *ptr)
+{
+   // Used to deallocate a TObject on the heap (via TObject::operator delete(void*,void*)).
+
+   if (vp && ptr) { }
+}
+
 //______________________________________________________________________________
 void TStorage::SetFreeHook(FreeHookFun_t fh, void *data)
 {