Index: tol/btol/bgrammar/nameblock.cpp
===================================================================
--- tol/btol/bgrammar/nameblock.cpp	(revision 7e78186a61ce2616ee8529311f78c35686b2fa43)
+++ tol/btol/bgrammar/nameblock.cpp	(revision c4144bc465c279f87480f51543f759d580f5df4b)
@@ -835,5 +835,59 @@
 
 //--------------------------------------------------------------------
-  bool BNameBlock::Using(const BSyntaxObject* obj)
+bool BNameBlock::add_using_symbol(
+  const BText& name,
+  BObjByNameHash::const_iterator iter,
+  bool usingAlsoReadOnly,
+  bool usingAlsoPrivate
+)
+//--------------------------------------------------------------------
+{
+  if((iter->first)[0]=='_')
+  {
+    if(!usingAlsoReadOnly && ((iter->first)[1]=='.')) { return(true); }
+    if(!usingAlsoPrivate  && ((iter->first)[1]!='.')) { return(true); }
+  }
+  bool ok = true;
+  BObjByNameHash::const_iterator found ;
+  BObjByClassNameHash::iterator fc;
+  found = usingSymbols_.find(iter->first);
+  if(found==usingSymbols_.end())
+  {
+  //Std(BText("\nUsing member '")+name+"::"+iter->first+"'\n");
+    usingSymbols_[iter->first]=iter->second;
+    assert(usingSymbols_.find(iter->first)!=usingSymbols_.end());
+    BObjClassify oc(iter->second);
+    fc = usingSymbolsByClass_.find(oc);
+    BObjByNameHash* x;
+    if(fc!=usingSymbolsByClass_.end())
+    {
+      x = fc->second;
+    }
+    else
+    {
+      x = new BObjByNameHash;
+      SetEmptyKey  ((*x), NULL);
+      SetDeletedKey((*x), name_del_key());
+      usingSymbolsByClass_[oc] = x;
+    }
+    (*x)[iter->first]=iter->second;
+  }
+  else
+  {
+    Warning(found->second->FullName()+
+            I2(" is already in use as global. "
+               "So cannot add ",
+               " ya se está usando como global. "
+               "Por lo tanto no se puede añadir ")+
+               name+"::"+iter->second->Name());
+    ok = false;
+  }
+  return(true);
+}
+//--------------------------------------------------------------------
+  bool BNameBlock::Using(
+    const BSyntaxObject* obj,
+    bool usingAlsoReadOnly,
+    bool usingAlsoPrivate)
 //--------------------------------------------------------------------
 {
@@ -856,43 +910,15 @@
   }
   bool ok = true;
+  BObjByNameHash::const_iterator iter;
   BNameBlock& ns = uns->Contens();
   BObjByNameHash& pbm = ns.Public();
-  BObjByNameHash::const_iterator iter;
-  BObjByNameHash::const_iterator found;
-  BObjByClassNameHash::iterator fc;
   for(iter=pbm.begin(); iter!=pbm.end(); iter++)
   {
-    found = usingSymbols_.find(iter->first);
-    if(found==usingSymbols_.end())
-    {
-    //Std(BText("\nUsing member '")+name+"::"+iter->first+"'\n");
-      usingSymbols_[iter->first]=iter->second;
-      assert(usingSymbols_.find(iter->first)!=usingSymbols_.end());
-      BObjClassify oc(iter->second);
-      fc = usingSymbolsByClass_.find(oc);
-      BObjByNameHash* x;
-      if(fc!=usingSymbolsByClass_.end())
-      {
-        x = fc->second;
-      }
-      else
-      {
-        x = new BObjByNameHash;
-        SetEmptyKey  ((*x), NULL);
-        SetDeletedKey((*x), name_del_key());
-        usingSymbolsByClass_[oc] = x;
-      }
-      (*x)[iter->first]=iter->second;
-    }
-    else
-    {
-      Warning(found->second->FullName()+
-              I2(" is already in use as global. "
-                 "So cannot add ",
-                 " ya se está usando como global. "
-                 "Por lo tanto no se puede añadir ")+
-                 name+"::"+iter->second->Name());
-      ok = false;
-    }
+    ok = add_using_symbol(name, iter, false, false);
+  }
+  BObjByNameHash& prm = ns.Private();
+  for(iter=prm.begin(); iter!=prm.end(); iter++)
+  {
+    ok = add_using_symbol(name, iter, usingAlsoReadOnly, usingAlsoPrivate);
   }
   return(ok);
@@ -1388,9 +1414,27 @@
   BDatUsingNameBlock(BList* arg) : BDatTemporary(arg) 
   {
-    uns_ = UNameBlock(Arg(1));
+    BList* lst = arg;
+    uns_ = UNameBlock(lst->Car()); 
+    lst = lst->Cdr();
     if(CheckNonDeclarativeAction("UsingNameBlock")) 
-    { contens_ = false; }
+    { 
+      contens_ = false; 
+    }
     else
-    { contens_ = BNameBlock::Using(uns_); }
+    { 
+      bool usingAlsoReadOnly = false;
+      bool usingAlsoPrivate = false;
+      if(lst && lst->Car())
+      {
+        usingAlsoReadOnly = Real(lst->Car())!=0.0;
+        lst = lst->Cdr();
+      }
+      if(lst && lst->Car())
+      {
+        usingAlsoPrivate = Real(lst->Car())!=0.0;
+        lst = lst->Cdr();
+      }
+      contens_ = BNameBlock::Using(uns_,usingAlsoReadOnly,usingAlsoPrivate); 
+    }
   }
  ~BDatUsingNameBlock()
@@ -1404,6 +1448,9 @@
 
 //--------------------------------------------------------------------
-  DefExtOpr(1, BDatUsingNameBlock, "UsingNameBlock",1,1,"NameBlock",
-  "(NameBlock nameBlock)",
+  DefExtOpr(1, BDatUsingNameBlock, "UsingNameBlock",1,3,
+  "NameBlock Real Real",
+  "(NameBlock nameBlock [, "
+    "Real usingAlsoReadOnly = False,"
+    "Real usingAlsoPrivate = False])",
   I2("In certain circumstances the public members of a NameBlock can "
      "pass to the global scope, that is to say, it is possible to "
Index: tol/btol/bgrammar/tol_bnameblock.h
===================================================================
--- tol/btol/bgrammar/tol_bnameblock.h	(revision 7e78186a61ce2616ee8529311f78c35686b2fa43)
+++ tol/btol/bgrammar/tol_bnameblock.h	(revision c4144bc465c279f87480f51543f759d580f5df4b)
@@ -99,5 +99,8 @@
   static BUserNameBlock* SetBuilding(BUserNameBlock* ns);
   static BSyntaxObject* EvaluateTree(const List* tre);
-  static bool Using  (const BSyntaxObject* uns);
+  static bool Using  (
+    const BSyntaxObject* uns,
+    bool usingAlsoReadOnly,
+    bool usingAlsoPrivate);
   static void Unusing(const BSyntaxObject* uns);
   static BSyntaxObject* LocalMember(const BText& memberName);
@@ -163,4 +166,12 @@
 
   DeclareClassNewDelete(BNameBlock);
+
+private:
+  static bool add_using_symbol  (
+    const BText& name,
+    BObjByNameHash::const_iterator iter,
+    bool usingAlsoReadOnly,
+    bool usingAlsoPrivate
+  );
 };
 
