diff --git a/ExprNode.hh b/ExprNode.hh
index fd53a62d183bf624a5b8b3ca070f451e8637401c..c77c8cbcf711af24a0c00990e930ce97089cc45c 100644
--- a/ExprNode.hh
+++ b/ExprNode.hh
@@ -86,7 +86,10 @@ enum ExprNodeOutputType
                                 || (output_type) == oMatlabDynamicSparseSteadyStateOperator \
                                 || (output_type) == oSteadyStateFile)
 
-#define IS_C(output_type) ((output_type) == oCDynamicModel || (output_type) == oCStaticModel || (output_type) == oCDynamicSteadyStateOperator)
+#define IS_C(output_type) ((output_type) == oCDynamicModel \
+			   || (output_type) == oCStaticModel \
+			   || (output_type) == oCDynamicSteadyStateOperator \
+			   || (output_type) == oCSteadyStateFile)
 
 #define IS_LATEX(output_type) ((output_type) == oLatexStaticModel       \
                                || (output_type) == oLatexDynamicModel   \
diff --git a/SteadyStateModel.cc b/SteadyStateModel.cc
index d84b4f770d862ce03f9770e1a06c2569908c12a9..2128f1bcb05a1b5f57be0c91458ea5ad79bee3dd 100644
--- a/SteadyStateModel.cc
+++ b/SteadyStateModel.cc
@@ -158,14 +158,16 @@ SteadyStateModel::writeSteadyStateFileCC(const string &basename, bool ramsey_pol
       exit(EXIT_FAILURE);
     }
 
+  output << "#include <math.h>" << endl;
+
   if (cuda)
     output << "__global__ ";
 
   output << "void steadystate("
-	 << "const double *exo_, const double *params_, double *ys_, int *info)" << endl
+	 << "const double *exo_, const double *params, double *ys_, int *info)" << endl
          << "// Steady state file generated by Dynare preprocessor" << endl
 	 << "{" << endl
-         << "    info = 0;" << endl;
+         << "    *info = 0;" << endl;
 
   if (recursive_order.size() == 0)
     {
@@ -179,24 +181,18 @@ SteadyStateModel::writeSteadyStateFileCC(const string &basename, bool ramsey_pol
       const vector<int> &symb_ids = recursive_order[i];
       output << "    ";
       if (symb_ids.size() > 1)
-        output << "[";
-      for (size_t j = 0; j < symb_ids.size(); j++)
-        {
-          variable_node_map_t::const_iterator it = variable_node_map.find(make_pair(symb_ids[j], 0));
-          assert(it != variable_node_map.end());
-          dynamic_cast<ExprNode *>(it->second)->writeOutput(output, oSteadyStateFile);
-          if (j < symb_ids.size()-1)
-            output << ",";
-        }
-      if (symb_ids.size() > 1)
-        output << "]";
-
+	std::cout << "Error: in C, multiple returns are not permitted in steady_state_model" << std::endl;
+      variable_node_map_t::const_iterator it = variable_node_map.find(make_pair(symb_ids[0], 0));
+      assert(it != variable_node_map.end());
+      if (it->second->get_type() == eModFileLocalVariable)
+	output << "double ";
+      dynamic_cast<ExprNode *>(it->second)->writeOutput(output, oCSteadyStateFile);
       output << "=";
-      def_table.find(symb_ids)->second->writeOutput(output, oSteadyStateFile);
+      def_table.find(symb_ids)->second->writeOutput(output, oCSteadyStateFile);
       output << ";" << endl;
     }
   output << "    // Auxiliary equations" << endl;
-  static_model.writeAuxVarInitval(output, oSteadyStateFile);
+  static_model.writeAuxVarInitval(output, oCSteadyStateFile);
   output << "}" << endl;
 }