Index: tol/btol/vmatrix_type/tol_bvmat_bsr.h
===================================================================
--- tol/btol/vmatrix_type/tol_bvmat_bsr.h	(revision 8a4804f5004678d2d349bccc3d98f754078e921e)
+++ tol/btol/vmatrix_type/tol_bvmat_bsr.h	(revision ac73d0582a3c877fef0069027715c3d658d10dda)
@@ -375,5 +375,4 @@
     return(aux);
   };
-
   const BText& BSR();
   int Initialize();
@@ -385,5 +384,4 @@
   BStruct* NoiseTimeInfo();
   BStruct* MasterInfo();
-
   int Parse_Module_Joint(
     const string &          fileName,
@@ -397,5 +395,4 @@
     BVMat&                  a, 
     BVMat&                  A);
-
   int Parse_Module_Primary(
     const string &          fileName,
@@ -409,5 +406,4 @@
     BVMat&                  a, 
     BVMat&                  A);
-
   int Parse_Module_Master(
     const std::string &     fileName,
@@ -415,9 +411,7 @@
     std::string &           sampler,
     vector<moduleDef>&      subModules);
-
   int Parse_Module(const BText& filePath, 
-                         BText& moduleType,
+                   const BText& moduleType,
                          BSet& contens_);
-
 };
 
Index: tol/btol/vmatrix_type/tol_bvmat_bsr_impl.h
===================================================================
--- tol/btol/vmatrix_type/tol_bvmat_bsr_impl.h	(revision 8a4804f5004678d2d349bccc3d98f754078e921e)
+++ tol/btol/vmatrix_type/tol_bvmat_bsr_impl.h	(revision ac73d0582a3c877fef0069027715c3d658d10dda)
@@ -299,4 +299,30 @@
 
 ///////////////////////////////////////////////////////////////////////////////
+class assign_moduleType
+///////////////////////////////////////////////////////////////////////////////
+{
+public:
+  string* moduleType_;
+  assign_moduleType(string& moduleType) 
+  : moduleType_(&moduleType)
+  {}
+  void action(const std::string& str) const
+  {
+    (*moduleType_) = str;
+  }
+  void operator()(const std::string& str) const
+  {
+    action(str);
+  }
+  template<typename IteratorT>
+  void operator()(IteratorT first, IteratorT last) const
+  {
+    std::string str;
+    str.assign(first, last);
+    action(str);
+  }
+};
+
+///////////////////////////////////////////////////////////////////////////////
 class assign_extern_var_name
 ///////////////////////////////////////////////////////////////////////////////
@@ -327,4 +353,5 @@
   }
 };
+
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1269,4 +1296,47 @@
 
 ///////////////////////////////////////////////////////////////////////////////
+class assign_var_to_ine_term
+///////////////////////////////////////////////////////////////////////////////
+{
+public:
+  symbol_handler<variable_info>* var_; 
+  var_term*              var_term_info_; 
+  int*                   nzmax_;
+
+  assign_var_to_ine_term(
+    symbol_handler<variable_info>& var, 
+    var_term&              var_term_info,
+    int&                   nzmax)
+  :
+  var_(&var),
+  var_term_info_(&var_term_info),
+  nzmax_(&nzmax)
+  {}
+
+  void action(variable_info& varInfo) const
+  {
+    assign_var_to_ine_term* t = (assign_var_to_ine_term*)this;
+    varInfo.used = true;
+    t->var_term_info_->varIndex = varInfo.index;
+    (*(t->nzmax_))++;
+  }
+  void operator()(const boost::reference_wrapper<int>& pos) const
+  {
+    int n = pos.get(); 
+    action(var_->vec[n]);
+  }
+  template<typename IteratorT>
+  void operator()(IteratorT first, IteratorT last) const
+  {
+    std::string str;
+    str.assign(first, last);
+    int* pos = find(var_->table,str.c_str());
+    action((var_->vec)[*pos]);
+  }
+
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
 class assign_var_to_equ_term
 ///////////////////////////////////////////////////////////////////////////////
@@ -1297,5 +1367,5 @@
   {
     int n = pos.get(); 
-    action((var_->vec)[n]);
+    action(var_->vec[n]);
   }
   template<typename IteratorT>
@@ -1427,36 +1497,4 @@
 };
       
-
-///////////////////////////////////////////////////////////////////////////////
-class assign_var_to_ine_term
-///////////////////////////////////////////////////////////////////////////////
-{
-public:
-  vector<variable_info>* var_vec_; 
-  var_term*              var_term_info_; 
-  int*                   nzmax_;
-
-  assign_var_to_ine_term(
-    vector<variable_info>& var_vec, 
-    var_term&              var_term_info,
-    int&                   nzmax)
-  :
-  var_vec_(&var_vec),
-  var_term_info_(&var_term_info),
-  nzmax_(&nzmax)
-  {}
-  void action(variable_info& varInfo) const
-  {
-    assign_var_to_ine_term* t = (assign_var_to_ine_term*) this;
-    t->var_term_info_->varIndex = varInfo.index;
-    (*t->nzmax_)++;
-  }
-  void operator()(const boost::reference_wrapper<int>& pos) const
-  {
-    assign_var_to_ine_term* t = (assign_var_to_ine_term*) this;
-    int n = pos.get(); 
-    action((*t->var_vec_)[n]);
-  }
-};
 
 
@@ -1788,5 +1826,5 @@
   string    moduleType;
   string    fileName;
-  ifstream* file;
+//ifstream* file;
   size_t    fileSize;
 
Index: tol/btol/vmatrix_type/tol_bvmat_bsr_run.h
===================================================================
--- tol/btol/vmatrix_type/tol_bvmat_bsr_run.h	(revision 8a4804f5004678d2d349bccc3d98f754078e921e)
+++ tol/btol/vmatrix_type/tol_bvmat_bsr_run.h	(revision ac73d0582a3c877fef0069027715c3d658d10dda)
@@ -21,36 +21,44 @@
  */
 
-const char* fName = fileName.c_str();
-//BOOST_SPIRIT_DEBUG_NODE(bsr);
-ifstream in(fName);
-if(!in)
 {
-  Error(BSR() + BText("Could not open input file: ") + 
-        fName + "\n");
-  return(-1);
+  //BOOST_SPIRIT_DEBUG_NODE(bsr);
+  BText curPath = BDir::GetCurrent();
+  const char* fName = fileName.c_str();
+  BText fullPath = Replace(curPath+"/"+BText(fName),"\\","/");
+  {
+    ifstream in(fName);
+    if(!in)
+    {
+      Error(BSR() + BText("Could not open input file: ") + 
+            fName + "\n");
+      return(-1);
+    }
+  }
+  bsr.fileName = fileName;
+  bsr.fileSize = GetFileSize(fName);
+//bsr.file = &in;
+
+  skip_grammar skip;
+  typedef position_iterator< file_iterator<char> > iterator_t; 
+  file_iterator<char> fiter(fullPath.String()); 
+  iterator_t begin(fiter, fiter.make_end(), fName);
+  iterator_t end;  
+  if(verbose)
+  {
+    Std(BSR()+"Parsing BSR file "+fullPath+" with "+(int)bsr.fileSize+" bytes\n");
+  }
+  parse_info<iterator_t> result = parse(begin, end, bsr, skip);
+  if(!result.full && !bsr.endFound_)
+  {
+    BText msg = BSR() +fullPath+ " fails parsing\n"+url_parse_bsr();
+    BText desc;
+    for (int i = 0; i < 1000; i++)
+    {
+      if (result.stop == end) break;
+      desc += *result.stop++;
+    }
+    if(!desc.HasName()) { desc = "Unexpectend end of file"; }
+    Error(msg+"\nProblem description:'"+desc+"'");
+    return(-2);
+  } 
 }
-bsr.fileName = fileName;
-bsr.fileSize = GetFileSize(fName);
-bsr.file = &in;
-
-in.unsetf(ios::skipws); //  Turn of white space skipping on the stream
-skip_grammar skip;
-typedef position_iterator< file_iterator<char> > iterator_t; 
-file_iterator<char> fiter(fileName); 
-iterator_t begin(fiter, fiter.make_end(), fName);
-iterator_t end;  
-Std(BSR()+"Parsing BSR file "+fName+" with "+(int)bsr.fileSize+" bytes\n");
-parse_info<iterator_t> result = parse(begin, end, bsr, skip);
-if(!result.full && !bsr.endFound_)
-{
-  BText msg = BSR() + BText(fName) + " Fails Parsing\n"+url_parse_bsr();
-  BText desc;
-  for (int i = 0; i < 1000; i++)
-  {
-    if (result.stop == end) break;
-    desc += *result.stop++;
-  }
-  if(!desc.HasName()) { desc = "Unexpectend end of file"; }
-  Error(msg+"\nProblem description:'"+desc+"'");
-  return(-2);
-} 
Index: tol/btol/vmatrix_type/vmat_bsr.cpp
===================================================================
--- tol/btol/vmatrix_type/vmat_bsr.cpp	(revision 8a4804f5004678d2d349bccc3d98f754078e921e)
+++ tol/btol/vmatrix_type/vmat_bsr.cpp	(revision ac73d0582a3c877fef0069027715c3d658d10dda)
@@ -275,4 +275,5 @@
     : s ((bys_sparse_reg_moduletype&)s_)
     {
+      assign_moduleType assign_moduleType_(s.moduleType);
       #include "tol_bvmat_bsr_err.h"     
       endOfSentence = (ch_p(';') | error_comma2Expected);
@@ -280,5 +281,5 @@
       (
         str_p("Module.Type") >> ch_p('=') >> 
-        (str_p("primary")|str_p("joint")|str_p("master"))[assign_a(s.moduleType)] >> 
+        (str_p("primary")|str_p("joint")|str_p("master"))[assign_moduleType_] >> 
         endOfSentence
       );
@@ -302,4 +303,5 @@
   bys_sparse_reg_moduletype bsr;
   int errCode = 0;
+  bool verbose = false;
   #include "tol_bvmat_bsr_run.h"
   if(!errCode)
@@ -761,13 +763,14 @@
 ////////////////////////////////////////////////////////////////////////////////
 int Parse_Module(const BText& filePath, 
-                       BText& moduleType,
+                 const BText& moduleType,
                  BSet& contens_)
 ////////////////////////////////////////////////////////////////////////////////
 {
-  if(moduleType=="")
-  {
-    Parse_ModuleType(filePath, moduleType);
-  }
-  if(moduleType=="master")
+  BText modTyp = moduleType;
+  if(modTyp=="")
+  {
+    Parse_ModuleType(filePath, modTyp);
+  }
+  if(modTyp=="master")
   {
     return(Parse_MasterModule(filePath,contens_));
Index: tol/btol/vmatrix_type/vmat_bsr_joint.cpp
===================================================================
--- tol/btol/vmatrix_type/vmat_bsr_joint.cpp	(revision 8a4804f5004678d2d349bccc3d98f754078e921e)
+++ tol/btol/vmatrix_type/vmat_bsr_joint.cpp	(revision ac73d0582a3c877fef0069027715c3d658d10dda)
@@ -52,4 +52,5 @@
     equ_info.index = 0;
     ine_info.index = 0;
+    moduleType = "joint";
   }
     
@@ -90,4 +91,5 @@
       add_symbol<sigma_info>    add_sig(s.sig);
       add_symbol<noise_info>    add_res(s.noise);
+      assign_moduleType assign_moduleType_(s.moduleType);
       assign_declared_var_name assign_declared_var_name_(s.var);
       assign_extern_var_name assign_extern_var_name_(s.var);
@@ -116,5 +118,5 @@
       assign_IsGE_to_ine assign_IsGE_to_ine_(s.ine_info);
       assign_IsLE_to_ine assign_IsLE_to_ine_(s.ine_info);
-      assign_var_to_ine_term assign_var_to_ine_term_(s.var.vec,s.ine_var_term_info,s.Anzmax_);
+      assign_var_to_ine_term assign_var_to_ine_term_(s.var,s.ine_var_term_info,s.Anzmax_);
       assign_noise_to_term assign_noise_to_term_(s.noise.vec,s.sig.vec,&s.equ_info);
       add_term_to_equ add_term_to_equ_(s.equ_info.X, s.equ_var_term_info);
@@ -403,10 +405,10 @@
         signIneVarTerm >>
         (
-          s.var.table[assign_var_to_ine_term_]
+          variableExistentOrExtern[assign_var_to_ine_term_]
           |
           (
             knownURealIneTerm >>
-            (product                              | error_prodExpected     ) >> 
-            (s.var.table[assign_var_to_ine_term_] | error_linBlkVarExpected)
+            (product                                           | error_prodExpected     ) >> 
+            (variableExistentOrExtern[assign_var_to_ine_term_] | error_linBlkVarExpected)
           )
         )
@@ -491,5 +493,7 @@
         //header
         (
-          ((str_p("Module.Type") >> ch_p('=') >> str_p("joint")[assign_a(s.moduleType)] >> endOfSentence) | eps_p) >>
+          ((str_p("Module.Type") >> ch_p('=') >> 
+                  str_p("joint")[assign_moduleType_] >> 
+           endOfSentence) | eps_p) >>
           model_nameDef >>
           model_descriptionDef >>
@@ -684,4 +688,5 @@
   bys_sparse_reg_joint bsr;
   int errCode = 0;
+  bool verbose = true;
   #include "tol_bvmat_bsr_run.h"
   if(!errCode)
Index: tol/btol/vmatrix_type/vmat_bsr_master.cpp
===================================================================
--- tol/btol/vmatrix_type/vmat_bsr_master.cpp	(revision 8a4804f5004678d2d349bccc3d98f754078e921e)
+++ tol/btol/vmatrix_type/vmat_bsr_master.cpp	(revision ac73d0582a3c877fef0069027715c3d658d10dda)
@@ -46,4 +46,5 @@
     currentSubMod()
   {
+    moduleType = "master";
   }
     
@@ -64,4 +65,5 @@
     : s ((bys_sparse_reg_master&)s_)
     {
+      assign_moduleType assign_moduleType_(s.moduleType);
       add_submodule add_submodule_(s.subMod, s.currentSubMod); 
       assign_explicit_end assign_explicit_end_(s.endFound_);
@@ -81,5 +83,5 @@
         (
           str_p("Module.Type") >> ch_p('=') >> 
-          (str_p("master")[assign_a(s.moduleType)]) >> 
+          (str_p("master")[assign_moduleType_]) >> 
           endOfSentence
         ) |
@@ -258,4 +260,5 @@
   bys_sparse_reg_master bsr;
   int errCode = 0;
+  bool verbose = true;
   #include "tol_bvmat_bsr_run.h"
   if(!errCode)
Index: tol/btol/vmatrix_type/vmat_bsr_primary.cpp
===================================================================
--- tol/btol/vmatrix_type/vmat_bsr_primary.cpp	(revision 8a4804f5004678d2d349bccc3d98f754078e921e)
+++ tol/btol/vmatrix_type/vmat_bsr_primary.cpp	(revision ac73d0582a3c877fef0069027715c3d658d10dda)
@@ -52,4 +52,5 @@
     descX_ = "Input regression matrix";
     var.info.used = true;
+    moduleType = "primary";
   }
     
@@ -68,5 +69,5 @@
       openBracket, closeBracket,
       openKey, closeKey,
-      identifier_simple, identifier,  newIdentifier, 
+      identifier_simple, identifier, nonExistentIdentifier, newIdentifier, 
       resSigmaDef, errorTerm, 
       signEquVarTerm, signIneVarTerm, 
@@ -75,5 +76,5 @@
       knownURealEquTerm, 
       knownURealIneTerm,
-      variable, missing, arima, noise,
+      variable, variableExistentOrExtern, missing, arima, noise,
       matOrVMatExpr, output, input,
       ineVarTerm, inequation,
@@ -89,5 +90,7 @@
       add_symbol<sigma_info>    add_sig(s.sig);
       add_symbol<noise_info>    add_res(s.noise);
+      assign_moduleType assign_moduleType_(s.moduleType);
       assign_declared_var_name assign_declared_var_name_(s.var);
+      assign_extern_var_name assign_extern_var_name_(s.var);
       assign_missing_min_neginf assign_missing_min_neginf_(s.mis); 
       assign_missing_max_posinf assign_missing_max_posinf_(s.mis); 
@@ -114,5 +117,5 @@
       assign_IsGE_to_ine assign_IsGE_to_ine_(s.ine_info);
       assign_IsLE_to_ine assign_IsLE_to_ine_(s.ine_info);
-      assign_var_to_ine_term assign_var_to_ine_term_(s.var.vec,s.ine_var_term_info,s.Anzmax_);
+      assign_var_to_ine_term assign_var_to_ine_term_(s.var,s.ine_var_term_info,s.Anzmax_);
       add_term_to_ine add_term_to_ine_(s.ine_info.A,s.ine_var_term_info);
       add_ine add_ine_(s.ine_vec, s.ine_info);
@@ -172,7 +175,9 @@
         (*(identifier_simple >> member)) >> identifier_simple;
         ;
+      nonExistentIdentifier = 
+         (identifier - (s.var.table | s.sig.table | s.mis.table | s.noise.table));
       newIdentifier = 
         (
-          (identifier - (s.var.table | s.sig.table | s.mis.table | s.noise.table)) |
+          nonExistentIdentifier |
           (identifier >> error_alreadyInUse >> nothing_p >> end_p)
         )
@@ -241,4 +246,10 @@
         endOfSentence[add_var]
         ;
+      variableExistentOrExtern =
+        s.var.table |
+        (
+          nonExistentIdentifier[assign_extern_var_name_]
+                               [add_var]
+        );
       missing =
         newIdentifier[increment_a(s.mis.info.index)]
@@ -372,10 +383,10 @@
         signIneVarTerm >>
         (
-          s.var.table[assign_var_to_ine_term_]
+          variableExistentOrExtern[assign_var_to_ine_term_]
           |
           (
             knownURealIneTerm >>
-            (product                              | error_prodExpected     ) >> 
-            (s.var.table[assign_var_to_ine_term_] | error_linBlkVarExpected)
+            (product                                           | error_prodExpected     ) >> 
+            (variableExistentOrExtern[assign_var_to_ine_term_] | error_linBlkVarExpected)
           )
         )
@@ -397,5 +408,5 @@
         (
           str_p("Module.Type") >> ch_p('=') >> 
-          str_p("primary")[assign_a(s.moduleType)] >> 
+          str_p("primary")[assign_moduleType_] >> 
           endOfSentence
         ) |
@@ -636,4 +647,5 @@
   bys_sparse_reg_primary bsr;
   int errCode = 0;
+  bool verbose = true;
   #include "tol_bvmat_bsr_run.h"
   if(!errCode)
