Index: tol/btol/bgrammar/graimp.cpp
===================================================================
--- tol/btol/bgrammar/graimp.cpp	(revision de1c7d83ae56a13f357584b7383a4084c19656ac)
+++ tol/btol/bgrammar/graimp.cpp	(revision 492d323b07f3ce2bbe37a8e8dd740f008ca981f7)
@@ -451,10 +451,13 @@
       if (!(gra1->Name()==gra2->Name())) 
       {
-        Error(name + I2(" is not a reference.",
-                        " no es una referencia de tipo ") + gra1->Name()+
-                     I2(" but it's a reference of type ",
-                        " sino de tipo ")+gra2->Name());
-         error = true;
-         result = NIL;
+        if(BOut::IsEnabled()) 
+        { 
+          Error(name + I2(" is not a reference.",
+                          " no es una referencia de tipo ") + gra1->Name()+
+                       I2(" but it's a reference of type ",
+                          " sino de tipo ")+gra2->Name());
+        }
+        error = true;
+        DESTROY(result);
       }
     }
@@ -539,4 +542,5 @@
 		 "Expresión no válida para formación de matrices : \n") +
 	      BParser::Unparse(tre, "  ", "\n"));
+      DESTROY(result);
 	return(NIL);
     }
@@ -710,4 +714,5 @@
   else if((type == TYPE) && (name=="#Require"))
   {
+    DESTROY(result);
     return(NULL);  
   }
@@ -817,20 +822,23 @@
       else     
       {
-        BGrammar* rg = result->Grammar();
-      //if(!rg && (name=="::"))
-        BText rgn = (rg)?rg->Name():"UNKNOWN TYPE";
-        BText tgn = this->Name();
-        BText rid = (rg)?result->Identify():BParser::Unparse(tre, "  ", "\n");
-        TRACE_SHOW_MEDIUM(fun,"3.3.1.2");
-        BText en = BText("It has not been possible to convert from ")+ 
-                   rgn+ " to "+
-                   tgn+ " for object '"+
-                   rid+"'";
-        BText es = BText("No ha sido posible convertir de ")+
-                   rgn+ " hacia "+
-                   tgn + " para el objeto '"+
-                   rid+"'";
-        Error(I2(en,es));
-        result = NIL;
+        if(BOut::IsEnabled()) 
+        { 
+          BGrammar* rg = result->Grammar();
+        //if(!rg && (name=="::"))
+          BText rgn = (rg)?rg->Name():"UNKNOWN TYPE";
+          BText tgn = this->Name();
+          BText rid = (rg)?result->Identify():BParser::Unparse(tre, "  ", "\n");
+          TRACE_SHOW_MEDIUM(fun,"3.3.1.2");
+          BText en = BText("It has not been possible to convert from ")+ 
+                     rgn+ " to "+
+                     tgn+ " for object '"+
+                     rid+"'";
+          BText es = BText("No ha sido posible convertir de ")+
+                     rgn+ " hacia "+
+                     tgn + " para el objeto '"+
+                     rid+"'";
+          Error(I2(en,es));
+        }
+        DESTROY(result);
       }
     }
@@ -894,5 +902,9 @@
   {
     BClass* cls = (BClass*) result;
-    if(!cls->isDefined_) { result = NULL; }
+    if(!cls->isDefined_) 
+    { 
+      DESTROY(result);
+      result = NULL; 
+    }
   }
   return(result);
