Index: tol/btol/set_type/set.cpp
===================================================================
--- tol/btol/set_type/set.cpp	(revision 04855da7952ad802bd95c95ab9d80e7f907b6a88)
+++ tol/btol/set_type/set.cpp	(revision 0cc72d60eee6a2001f8eaca65e9598c7199bcb57)
@@ -39,4 +39,105 @@
 BSyntaxObject* BSet::objCond_	= NIL;
 BSet	         BSet::unknown_;
+
+//--------------------------------------------------------------------
+static bool DoIndexElement(BObjByIdxNameHash** indexByName, 
+                           BSyntaxObject* obj,
+                           int i)
+//--------------------------------------------------------------------
+{
+  bool ok = true;
+  if(indexByName && *indexByName && obj)
+  {
+    const BText& name = obj->Name();
+    if(name.HasName())
+    {
+      BObjByIdxNameHash::const_iterator found = (*indexByName)->find(name);
+      if(found!=(*indexByName)->end())
+      {
+        Error(I2("Duplicated index name ",
+                 "Nombre de Ã­ndice duplicado ")+
+              name);
+        ok = false;
+      }
+      (**indexByName)[name] = BIndexedSyntaxObject(i,obj);
+    }
+    else
+    {
+      Error(I2("A indexed by name set cannot have elements without a valid name ",
+               "Un conjunto indexado por nombres no puede tener elementos sin un nombre vÃ¡lido ")
+            +"'"+name+"'");
+      ok = false;
+    }
+   if(!ok) { delete *indexByName; *indexByName = NULL; }
+  }
+  return(ok);
+}
+
+//--------------------------------------------------------------------
+static bool UnIndexElement(BObjByIdxNameHash** indexByName, 
+                           BSyntaxObject* obj)
+//--------------------------------------------------------------------
+{
+  bool ok = true;
+  if(indexByName && *indexByName && obj)
+  {
+    const BText& name = obj->Name();
+    if(name.HasName())
+    {
+      BObjByIdxNameHash::const_iterator found = (*indexByName)->find(name);
+      if(found!=(*indexByName)->end())
+      {
+        (*indexByName)->erase(name);
+      }
+      else
+      {
+        Error(I2("Cannot remove the non found index name ",
+                 "No se puede eliminar el Ã­ndice de nombre no encontrado ")+
+              name);
+        ok = false;
+      }
+    }
+    if(!ok) { delete *indexByName; *indexByName = NULL; }
+  }
+  return(ok);
+}
+
+//--------------------------------------------------------------------
+static bool ReIndexElement(BObjByIdxNameHash** indexByName, 
+                           BSyntaxObject* obj,
+                           int i)
+//--------------------------------------------------------------------
+{
+  bool ok = true;
+  if(indexByName && *indexByName && obj)
+  {
+    const BText& name = obj->Name();
+    if(name.HasName())
+    {
+      BObjByIdxNameHash::iterator found = (*indexByName)->find(name);
+      if(found!=(*indexByName)->end())
+      {
+        found->second.position_ = i;
+      }
+      else
+      {
+        Error(I2("Cannot remove the non found index name ",
+                 "No se puede eliminar el Ã­ndice de nombre no encontrado ")+
+              name);
+        ok = false;
+      }
+    }
+    else
+    {
+      Error(I2("A indexed by name set cannot have elements without a valid name ",
+               "Un conjunto indexado por nombres no puede tener elementos sin un nombre vÃ¡lido ")
+            +"'"+name+"'");
+      ok = false;
+    }
+   if(!ok) { delete *indexByName; *indexByName = NULL; }
+  }
+  return(ok);
+}
+
 
 //--------------------------------------------------------------------
@@ -334,37 +435,5 @@
 }
 
-//--------------------------------------------------------------------
-static bool DoIndexElement(BObjByIdxNameHash** indexByName, 
-                           BSyntaxObject* obj,
-                           int i)
-//--------------------------------------------------------------------
-{
-  bool ok = true;
-  if(indexByName && *indexByName && obj)
-  {
-    const BText& name = obj->Name();
-    if(name.HasName())
-    {
-      BObjByIdxNameHash::const_iterator found = (*indexByName)->find(name);
-      if(found!=(*indexByName)->end())
-      {
-        Error(I2("Duplicated index name ",
-                 "Nombre de ï¿œndice duplicado ")+
-              name);
-        ok = false;
-      }
-      (**indexByName)[name] = BIndexedSyntaxObject(i,obj);
-    }
-    else
-    {
-      Error(I2("A indexed by name set cannot have elements without a valid name ",
-               "Un conjunto indexado por nombres no puede tener elementos sin un nombre vï¿œlido ")
-            +"'"+name+"'");
-      ok = false;
-    }
-   if(!ok) { delete *indexByName; *indexByName = NULL; }
-  }
-  return(ok);
-}
+
 
 //--------------------------------------------------------------------
@@ -396,8 +465,10 @@
   if((n<0)||(n>=s)) { return; }
   BSyntaxObject* found = array_[n];
+  UnIndexElement(&indexByName_,found);
   int i;
   for(i=n; i<s-1; i++)
   {
     array_[i] = array_[i+1];
+    ReIndexElement(&indexByName_,array_[i],i);
   }
   array_.ReallocBuffer(s-1);
@@ -413,6 +484,8 @@
   if((n<0)||(n>=s)) { return; }
   BSyntaxObject* found = array_[n];
+  UnIndexElement(&indexByName_,found);
   newObject->IncNRefs();
   array_[n] = newObject;
+  DoIndexElement(&indexByName_,array_[n],n);
   found->DecNRefs();
   if(deleteOld) { DESTROY(found); }
Index: tol/btol/set_type/setgra.cpp
===================================================================
--- tol/btol/set_type/setgra.cpp	(revision 04855da7952ad802bd95c95ab9d80e7f907b6a88)
+++ tol/btol/set_type/setgra.cpp	(revision 0cc72d60eee6a2001f8eaca65e9598c7199bcb57)
@@ -161,8 +161,11 @@
 		  I2("Removes the n-th element of a set and tries to delete it "
          "from memory if deleteOld is true. Returns the own set "
-         "with the rest of elements."  ,
+         "with the rest of elements."
+         "If the set was indexed by name then the indes will be updated.",
 	       "Elimina el n-esimo elemento de un conjunto e intenta "
          "borrar el viejo de la memoria si deleteOld es cierto. "
-         "Devuelve el propio conjunto con el resto de elementos."),
+         "Devuelve el propio conjunto con el resto de elementos."
+         "Si el conjunto estaba indexado por nombre el índice será "
+         "actualizado"),
 		  BOperClassify::SetAlgebra_
     )
@@ -202,9 +205,12 @@
 		  I2("Replaces the n-th element of a set by a another new one "
          "and tries to delete the old one from memory if deleteOld "
-         "is true. Returns the own set with the new changed element.",
+         "is true. Returns the own set with the new changed element."
+         "If the set was indexed by name then the indes will be updated." ,
 	       "Reemplaza el n-ésimo elemento de un conjunto por otro "
          "nuevo e intenta borrar el viejo de la memoria si deleteOld "
          "es cierto. Devuelve el propio conjunto con el elemento "
-         "cambiado."),
+         "cambiado."
+         "Si el conjunto estaba indexado por nombre el índice será "
+         "actualizado"),
 		  BOperClassify::SetAlgebra_
     )
