diff --git a/ModFile.cc b/ModFile.cc
index 7571da2ddbc91f4b6d335a115add66865d407559..a5ab0a424d436487f47ff8c6ae9d60aa80f819a2 100644
--- a/ModFile.cc
+++ b/ModFile.cc
@@ -852,6 +852,15 @@ ModFile::writeCOutputFiles(const string &basename) const
 
   dynamic_model.writeCOutput(mDriverCFile, basename, false, false, true, mod_file_struct.order_option, mod_file_struct.estimation_present);
 
+  mDriverCFile << "/*" << endl
+               << " * Writing statements" << endl
+               << " */" << endl;
+
+  // Print statements
+  for (vector<Statement *>::const_iterator it = statements.begin();
+       it != statements.end(); it++)
+      (*it)->writeCOutput(mDriverCFile, basename);
+
   mDriverCFile << "}" << endl;
   mDriverCFile.close();
 
diff --git a/NumericalInitialization.cc b/NumericalInitialization.cc
index 4e2fc618a7f77ac397338b08a1926758f82c31c1..0d6bcecc1301bfc7daf37022fc11ec21557e65ff 100644
--- a/NumericalInitialization.cc
+++ b/NumericalInitialization.cc
@@ -50,6 +50,16 @@ InitParamStatement::writeOutput(ostream &output, const string &basename) const
   output << symbol_table.getName(symb_id) << " = M_.params( " << id << " );\n";
 }
 
+void
+InitParamStatement::writeCOutput(ostream &output, const string &basename)
+{
+  int id = symbol_table.getTypeSpecificID(symb_id);
+  output << "params[ " << id << " ] = ";
+  param_value->writeOutput(output);
+  output << ";" << endl;
+  output << "double " << symbol_table.getName(symb_id) << " = params[ " << id << " ];" << endl;
+}
+
 void
 InitParamStatement::fillEvalContext(eval_context_t &eval_context) const
 {
diff --git a/NumericalInitialization.hh b/NumericalInitialization.hh
index f92144103dd7bebd55405988c4475415c171fc55..b03ab0d218def211423f868414ba9bc468daf6a8 100644
--- a/NumericalInitialization.hh
+++ b/NumericalInitialization.hh
@@ -41,6 +41,7 @@ public:
                      const SymbolTable &symbol_table_arg);
   virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
   virtual void writeOutput(ostream &output, const string &basename) const;
+  virtual void writeCOutput(ostream &output, const string &basename);
   //! Fill eval context with parameter value
   void fillEvalContext(eval_context_t &eval_context) const;
 };
diff --git a/Statement.cc b/Statement.cc
index f990f6110ba7ad94026e3871c9bd7c2e8d87dcfe..3ce955d66c73a9779d2e2ac6b5149c7778388042 100644
--- a/Statement.cc
+++ b/Statement.cc
@@ -63,6 +63,11 @@ Statement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &wa
 {
 }
 
+void
+Statement::writeCOutput(ostream &output, const string &basename)
+{
+}
+
 void
 Statement::computingPass()
 {
diff --git a/Statement.hh b/Statement.hh
index 40e37818dc17b05a9efe586b39c851e78423fd0a..6abda8fca7c91c1443580b7e8a3b1e5b2d515d65 100644
--- a/Statement.hh
+++ b/Statement.hh
@@ -138,6 +138,7 @@ public:
     \param basename is the name of the modfile (without extension) which can be used to build auxiliary files
   */
   virtual void writeOutput(ostream &output, const string &basename) const = 0;
+  virtual void writeCOutput(ostream &output, const string &basename);
 };
 
 class NativeStatement : public Statement