diff --git a/DynamicModel.cc b/DynamicModel.cc
index a97d9ce07a403b3ff8689f2f1bab69165e29f21a..619dabefe2d3daba3bb26ea66b396207311a4ba9 100644
--- a/DynamicModel.cc
+++ b/DynamicModel.cc
@@ -299,7 +299,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &dynamic_basename) const
              << "  % //                     Simulation type "
              << BlockSim(simulation_type) << "  //" << endl
              << "  % ////////////////////////////////////////////////////////////////////////" << endl;
-      output << "  global options_;" << endl;
+      output << "  global options_ oo_;" << endl;
       //The Temporary terms
       if (simulation_type == EVALUATE_BACKWARD || simulation_type == EVALUATE_FORWARD)
         {
@@ -1447,7 +1447,7 @@ DynamicModel::writeDynamicCFile(const string &dynamic_basename, const int order)
   mDynamicModelFile << "/* The gateway routine */" << endl
                     << "void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])" << endl
                     << "{" << endl
-                    << "  double *y, *x, *params;" << endl
+                    << "  double *y, *x, *params, *steady_state;" << endl
                     << "  double *residual, *g1, *v2, *v3;" << endl
                     << "  int nb_row_x, it_;" << endl
                     << endl
@@ -1505,8 +1505,9 @@ DynamicModel::writeDynamicCFile(const string &dynamic_basename, const int order)
                     << "     v3 = mxGetPr(plhs[3]);" << endl
                     << "  }" << endl
                     << endl
+                    << "  steady_state = mxGetPr(mxGetField(mexGetVariable(\"global\", \"oo_\"), 0, \"steady_state\"));" << endl
                     << "  /* Call the C subroutines. */" << endl
-                    << "  Dynamic(y, x, nb_row_x, params, it_, residual, g1, v2, v3);" << endl
+                    << "  Dynamic(y, x, nb_row_x, params, steady_state, it_, residual, g1, v2, v3);" << endl
                     << "}" << endl;
   mDynamicModelFile.close();
 }
@@ -2108,7 +2109,7 @@ DynamicModel::writeDynamicModel(ostream &DynamicOutput, bool use_dll) const
     }
   else
     {
-      DynamicOutput << "void Dynamic(double *y, double *x, int nb_row_x, double *params, int it_, double *residual, double *g1, double *v2, double *v3)" << endl
+      DynamicOutput << "void Dynamic(double *y, double *x, int nb_row_x, double *params, double *steady_state, int it_, double *residual, double *g1, double *v2, double *v3)" << endl
                     << "{" << endl
                     << "  double lhs, rhs;" << endl
                     << endl
diff --git a/ExprNode.cc b/ExprNode.cc
index 43c9afff94a3eea70fea1bef5c6971a2ed5beb54..e927e1fb36f35e0d86bb1e17110020490a2d31ef 100644
--- a/ExprNode.cc
+++ b/ExprNode.cc
@@ -582,8 +582,12 @@ VariableNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
           output << "oo_.steady_state(" << tsid + 1 << ")";
           break;
         case oMatlabDynamicSteadyStateOperator:
+        case oMatlabDynamicSparseSteadyStateOperator:
           output << "oo_.steady_state(" << tsid + 1 << ")";
           break;
+        case oCDynamicSteadyStateOperator:
+          output << "steady_state[" << tsid << "]";
+          break;
         case oSteadyStateFile:
           output << "ys_(" << tsid + 1 << ")";
           break;
@@ -1457,11 +1461,11 @@ UnaryOpNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
           new_output_type = oLatexDynamicSteadyStateOperator;
           break;
         case oCDynamicModel:
-          cerr << "Steady State Operator not implemented for oCDynamicModel." << endl;
-          exit(EXIT_FAILURE);
+          new_output_type = oCDynamicSteadyStateOperator;
+          break;
         case oMatlabDynamicModelSparse:
-          cerr << "Steady State Operator not implemented for oMatlabDynamicModelSparse." << endl;
-          exit(EXIT_FAILURE);
+          new_output_type = oMatlabDynamicSparseSteadyStateOperator;
+          break;
         default:
           new_output_type = output_type;
           break;
diff --git a/ExprNode.hh b/ExprNode.hh
index e57d52e1cd5643ea43032e49ab9eccf4beeef403..a01eb2e3120e2e16e5be33cd62a6deab6ed64725 100644
--- a/ExprNode.hh
+++ b/ExprNode.hh
@@ -60,17 +60,18 @@ typedef map<pair<int, vector<expr_t> >, int> deriv_node_temp_terms_t;
 //! Possible types of output when writing ExprNode(s)
 enum ExprNodeOutputType
   {
-    oMatlabStaticModel,                           //!< Matlab code, static model declarations
-    oMatlabDynamicModel,                          //!< Matlab code, dynamic model declarations
-    oMatlabStaticModelSparse,                     //!< Matlab code, static block decomposed mode declaration
-    oMatlabDynamicModelSparse,                    //!< Matlab code, dynamic block decomposed mode declaration
-    oCDynamicModel,                               //!< C code, dynamic model declarations
+    oMatlabStaticModel,                           //!< Matlab code, static model
+    oMatlabDynamicModel,                          //!< Matlab code, dynamic model
+    oMatlabStaticModelSparse,                     //!< Matlab code, static block decomposed model
+    oMatlabDynamicModelSparse,                    //!< Matlab code, dynamic block decomposed model
+    oCDynamicModel,                               //!< C code, dynamic model
     oMatlabOutsideModel,                          //!< Matlab code, outside model block (for example in initval)
-    oLatexStaticModel,                            //!< LaTeX code, static model declarations
-    oLatexDynamicModel,                           //!< LaTeX code, dynamic model declarations
-    oLatexDynamicSteadyStateOperator,             //!< LaTeX code, dynamic model steady state declarations
-    oMatlabDynamicSteadyStateOperator,            //!< Matlab code, dynamic model steady state declarations
-    oMatlabDynamicModelSparseSteadyStateOperator, //!< Matlab code, dynamic block decomposed model steady state declarations
+    oLatexStaticModel,                            //!< LaTeX code, static model
+    oLatexDynamicModel,                           //!< LaTeX code, dynamic model
+    oLatexDynamicSteadyStateOperator,             //!< LaTeX code, dynamic model, inside a steady state operator
+    oMatlabDynamicSteadyStateOperator,            //!< Matlab code, dynamic model, inside a steady state operator
+    oMatlabDynamicSparseSteadyStateOperator,      //!< Matlab code, dynamic block decomposed model, inside a steady state operator
+    oCDynamicSteadyStateOperator,                 //!< C code, dynamic model, inside a steady state operator
     oSteadyStateFile                              //!< Matlab code, in the generated steady state file
   };
 
@@ -80,10 +81,10 @@ enum ExprNodeOutputType
                                 || (output_type) == oMatlabStaticModelSparse \
                                 || (output_type) == oMatlabDynamicModelSparse \
                                 || (output_type) == oMatlabDynamicSteadyStateOperator \
-                                || (output_type) == oMatlabDynamicModelSparseSteadyStateOperator \
+                                || (output_type) == oMatlabDynamicSparseSteadyStateOperator \
                                 || (output_type) == oSteadyStateFile)
 
-#define IS_C(output_type) ((output_type) == oCDynamicModel)
+#define IS_C(output_type) ((output_type) == oCDynamicModel || (output_type) == oCDynamicSteadyStateOperator)
 
 #define IS_LATEX(output_type) ((output_type) == oLatexStaticModel       \
                                || (output_type) == oLatexDynamicModel   \