diff --git a/mex/sources/bytecode/ErrorHandling.hh b/mex/sources/bytecode/ErrorHandling.hh
index fe6047c8865e20e46e0439abf787ff0adafd1e7b..f8419bfb5bccd79bc35fae53ec13ea52c05b1412 100644
--- a/mex/sources/bytecode/ErrorHandling.hh
+++ b/mex/sources/bytecode/ErrorHandling.hh
@@ -37,6 +37,8 @@
 # define CHAR_LENGTH 2
 #endif
 
+#define ASCII_POUND_SIGN_CODE 156
+
 #ifdef _MSC_VER
 #include <limits>
 #define M_E 2.71828182845904523536
@@ -328,20 +330,24 @@ public:
     string temp;
     int pos1 = -1, pos2 = -1;
     string tmp_n(str.length(), ' ');
+    string dollar, pound, tilde;
+    dollar = "$";
+    pound = (char)ASCII_POUND_SIGN_CODE;
+    tilde = "~";
     for (unsigned int i = 0; i < str.length(); i++)
       {
-        if (str[i] != '$' && str[i] != '�')
+        if (dollar.compare(&str[i]) != 0 && pound.compare(&str[i]) != 0)
           temp += str[i];
         else
           {
-            if (str[i] == '$')
+            if (dollar.compare(&str[i]) == 0)
               pos1 = int(temp.length());
             else
               pos2 = int(temp.length());
             if (pos1 >= 0 && pos2 >= 0)
               {
                 tmp_n.erase(pos1, pos2-pos1+1);
-                tmp_n.insert(pos1, pos2-pos1, '~');
+                tmp_n.insert(pos1, pos2-pos1, tilde[0]);
                 pos1 = pos2 = -1;
               }
           }
@@ -408,7 +414,7 @@ public:
                 res << P_endo_names[CHAR_LENGTH*(variable_num+i*nb_endo)];
           }
         else
-          mexPrintf("=> Unknown endogenous variable n� %d", variable_num);
+          mexPrintf("=> Unknown endogenous variable # %d", variable_num);
         break;
       case eExogenous:
       case eExogenousDet:
@@ -419,7 +425,7 @@ public:
                 res << P_exo_names[CHAR_LENGTH*(variable_num+i*nb_exo)];
           }
         else
-          mexPrintf("=> Unknown exogenous variable n� %d", variable_num);
+          mexPrintf("=> Unknown exogenous variable # %d", variable_num);
         break;
       case eParameter:
         if (variable_num < nb_param)
@@ -429,7 +435,7 @@ public:
                 res << P_param_names[CHAR_LENGTH*(variable_num+i*nb_param)];
           }
         else
-          mexPrintf("=> Unknown parameter n� %d", variable_num);
+          mexPrintf("=> Unknown parameter # %d", variable_num);
         break;
       default:
         break;
@@ -1271,7 +1277,7 @@ public:
                       tmp_out << "$";
                     tmp_out << " / ";
                     if (isinf(r))
-                      tmp_out << "�";
+                      tmp_out << (char)ASCII_POUND_SIGN_CODE;
                   }
                 else
                   tmp_out << " / ";
@@ -1434,7 +1440,7 @@ public:
                 if (compute)
                   {
                     if (isnan(r))
-                      tmp_out << "$ ^ �";
+                      tmp_out << "$ ^ " << (char)ASCII_POUND_SIGN_CODE;
                     else
                       tmp_out << " ^ ";
                   }
@@ -1476,7 +1482,7 @@ public:
                   if (compute)
                     {
                       if (isnan(r))
-                        tmp_out << "$ PowerDeriv �";
+                        tmp_out << "$ PowerDeriv " << (char)ASCII_POUND_SIGN_CODE;
                       else
                         tmp_out << "PowerDeriv";
                     }
@@ -1550,7 +1556,7 @@ public:
                 if (compute)
                   {
                     if (isnan(r))
-                      tmp_out << "$log�(" << v1 << ")";
+                      tmp_out << "$log" << (char)ASCII_POUND_SIGN_CODE << "(" << v1 << ")";
                     else
                       tmp_out << "log(" << v1 << ")";
                   }
@@ -1568,7 +1574,7 @@ public:
                 if (compute)
                   {
                     if (isnan(r))
-                      tmp_out << "$log10�(" << v1 << ")";
+                      tmp_out << "$log10" << (char)ASCII_POUND_SIGN_CODE << "(" << v1 << ")";
                     else
                       tmp_out << "log10(" << v1 << ")";
                   }
@@ -1774,11 +1780,7 @@ public:
                       }
                     tmp_out.str("");
                     tmp_out << function_name << "(";
-#ifndef _MSC_VER
-                    string ss[nb_input_arguments];
-#else
                     vector<string> ss(nb_input_arguments);
-#endif
                     for (unsigned int i = 0; i < nb_input_arguments; i++)
                       {
                         ss[nb_input_arguments-i-1] = Stack.top();
@@ -1832,11 +1834,7 @@ public:
                     tmp_out.str("");
                     tmp_out << function_name << "(";
                     tmp_out << arg_func_name.c_str() << ", " << fc->get_row() << ", {";
-#ifndef _MSC_VER
-                    string ss[nb_add_input_arguments];
-#else
                     vector<string> ss(nb_input_arguments);
-#endif
                     for (unsigned int i = 0; i < nb_add_input_arguments; i++)
                       {
                         ss[nb_add_input_arguments-i-1] = Stack.top();
@@ -1867,11 +1865,7 @@ public:
                       }
                     tmp_out.str("");
                     tmp_out << function_name << "(";
-#ifndef _MSC_VER
-                    string ss[nb_input_arguments];
-#else
                     vector<string> ss(nb_input_arguments);
-#endif
                     for (unsigned int i = 0; i < nb_input_arguments; i++)
                       {
                         ss[nb_input_arguments-i-1] = Stack.top();
@@ -1924,11 +1918,7 @@ public:
                     tmp_out.str("");
                     tmp_out << function_name << "(";
                     tmp_out << arg_func_name.c_str() << ", " << fc->get_row() << ", " << fc->get_col() << ", {";
-#ifndef _MSC_VER
-                    string ss[nb_add_input_arguments];
-#else
                     vector<string> ss(nb_input_arguments);
-#endif
                     for (unsigned int i = 0; i < nb_add_input_arguments; i++)
                       {
                         ss[nb_add_input_arguments-i-1] = Stack.top();
@@ -1959,11 +1949,7 @@ public:
                       }
                     tmp_out.str("");
                     tmp_out << function_name << "(";
-#ifndef _MSC_VER
-                    string ss[nb_input_arguments];
-#else
                     vector<string> ss(nb_input_arguments);
-#endif
                     for (unsigned int i = 0; i < nb_input_arguments; i++)
                       {
                         ss[nb_input_arguments-i-1] = Stack.top();
diff --git a/mex/sources/bytecode/bytecode.cc b/mex/sources/bytecode/bytecode.cc
index 98ee11402afd4a017c536ad01c1c8f8114476114..3c2f29b6ff658bea6d2f58187f2b562b07311ae1 100644
--- a/mex/sources/bytecode/bytecode.cc
+++ b/mex/sources/bytecode/bytecode.cc
@@ -527,7 +527,7 @@ main(int nrhs, const char *prhs[])
       for (vector<s_plan>::iterator it = splan.begin(); it != splan.end(); it++)
         {
           mexPrintf("----------------------------------------------------------------------------------------------------\n");
-          mexPrintf("suprise n�%d\n", i+1);
+          mexPrintf("suprise #%d\n", i+1);
           if (it->exo.length())
             mexPrintf(" plan fliping var=%s (%d) exo=%s (%d) for the following periods and with the following values:\n", it->var.c_str(), it->var_num, it->exo.c_str(), it->exo_num);
           else
@@ -605,7 +605,7 @@ main(int nrhs, const char *prhs[])
       for (vector<s_plan>::iterator it = spfplan.begin(); it != spfplan.end(); it++)
         {
           mexPrintf("----------------------------------------------------------------------------------------------------\n");
-          mexPrintf("perfect foresight n�%d\n", i+1);
+          mexPrintf("perfect foresight #%d\n", i+1);
           if (it->exo.length())
             mexPrintf(" plan flipping var=%s (%d) exo=%s (%d) for the following periods and with the following values:\n", it->var.c_str(), it->var_num, it->exo.c_str(), it->exo_num);
           else
diff --git a/mex/sources/estimation/libmat/DiscLyapFast.hh b/mex/sources/estimation/libmat/DiscLyapFast.hh
index dc08bb8e99eca4a8f6f81e01f58b60f9829f3304..cd0b014c0c34d81f5abd7097a53aa044049662c5 100644
--- a/mex/sources/estimation/libmat/DiscLyapFast.hh
+++ b/mex/sources/estimation/libmat/DiscLyapFast.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010-2011 Dynare Team
+ * Copyright (C) 2010-2013 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -62,13 +62,13 @@ public:
   };
   virtual ~DiscLyapFast() {};
   template <class MatG, class MatV, class MatX >
-  void solve_lyap(const MatG &G, const MatV &V, MatX &X, double tol, size_t flag_ch) throw (DLPException);
+  void solve_lyap(const MatG &G, const MatV &V, MatX &X, double tol = 1e-16, size_t flag_ch = 0) throw (DLPException);
 
 };
 
 template <class MatG, class MatV, class MatX >
 void
-DiscLyapFast::solve_lyap(const MatG &G, const MatV &V, MatX &X, double tol = 1e-16, size_t flag_ch = 0) throw (DLPException)
+DiscLyapFast::solve_lyap(const MatG &G, const MatV &V, MatX &X, double tol, size_t flag_ch) throw (DLPException)
 {
   P0 = V;
   P1 = V;
diff --git a/preprocessor/DynamicModel.cc b/preprocessor/DynamicModel.cc
index 8c47907c301d3fa1d2f40f27d51bb5398c2f82b2..5f6b5bbe1d695474ff37baea3273c37644fe34c9 100644
--- a/preprocessor/DynamicModel.cc
+++ b/preprocessor/DynamicModel.cc
@@ -210,7 +210,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &dynamic_basename) const
   ostringstream tmp_output, tmp1_output, global_output;
   expr_t lhs = NULL, rhs = NULL;
   BinaryOpNode *eq_node;
-  ostringstream Uf[symbol_table.endo_nbr()];
+  vector<ostringstream> Uf(symbol_table.endo_nbr());
   map<expr_t, int> reference_count;
   temporary_terms_t local_temporary_terms;
   ofstream  output;