Index: /issm/trunk/src/c/objects/DakotaPlugin.cpp
===================================================================
--- /issm/trunk/src/c/objects/DakotaPlugin.cpp	(revision 1842)
+++ /issm/trunk/src/c/objects/DakotaPlugin.cpp	(revision 1843)
@@ -44,8 +44,8 @@
 
 //constructor
-DakotaPlugin::DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* in_femmodels, void* in_inputs, int in_analysis_type, int in_sub_analysis_type):Dakota::DirectApplicInterface(problem_db){
+DakotaPlugin::DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* in_model, void* in_inputs, int in_analysis_type, int in_sub_analysis_type):Dakota::DirectApplicInterface(problem_db){
 
 
-	femmodels=in_femmodels;
+	model=in_model;
 	inputs=in_inputs;
 	analysis_type=in_analysis_type;
@@ -91,5 +91,5 @@
 
 	/*run core solution: */
-	SpawnCore(responses,numFns, variables,variable_descriptors,numACV,femmodels,inputs,analysis_type,sub_analysis_type,counter);
+	SpawnCore(responses,numFns, variables,variable_descriptors,numACV,model,inputs,analysis_type,sub_analysis_type,counter);
 
 	/*populate responses: */
Index: /issm/trunk/src/c/objects/DakotaPlugin.h
===================================================================
--- /issm/trunk/src/c/objects/DakotaPlugin.h	(revision 1842)
+++ /issm/trunk/src/c/objects/DakotaPlugin.h	(revision 1843)
@@ -18,9 +18,9 @@
 public:
 
-	DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* femmodels, void* inputs, int analysis_type, int sub_analysis_type);
+	DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* model, void* inputs, int analysis_type, int sub_analysis_type);
 	~DakotaPlugin();
 
 	/*these fields are used by core solutions: */
-	void* femmodels;
+	void* model;
 	void* inputs;
 
Index: /issm/trunk/src/c/objects/Model.cpp
===================================================================
--- /issm/trunk/src/c/objects/Model.cpp	(revision 1843)
+++ /issm/trunk/src/c/objects/Model.cpp	(revision 1843)
@@ -0,0 +1,88 @@
+/*!\file Model.c
+ * \brief: implementation of the Model object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Model.h"
+#include "stdio.h"
+
+Model::Model(){
+	return;
+}
+
+Model::~Model(){
+	/*none of the FemModels are copied, just pointers -> no dynamic allocation.*/
+	return;
+}
+
+#undef __FUNCT__
+#define __FUNCT__ "Model::Echo"
+
+void Model::Echo(void){
+
+	printf("Model:\n");
+	printf("   diagnostichorizontal: %p\n",diagnostichorizontal);
+	printf("   diagnosticvertical: %p\n",diagnosticvertical);
+	printf("   diagnosticstokes: %p\n",diagnosticstokes);
+	printf("   diagnostichutter: %p\n",diagnostichutter);
+	printf("   slope: %p\n",slope);
+	printf("   prognostic: %p\n",prognostic);
+	printf("   thermal: %p\n",thermal);
+	printf("   melting: %p\n",melting);
+	printf("   active: %p\n",active);
+
+}
+#undef __FUNCT__
+#define __FUNCT__ "Model::DeepEcho"
+
+void Model::DeepEcho(void){
+
+	printf("Model:\n");
+	printf("   diagnostichorizontal: %p\n",diagnostichorizontal);
+	printf("   diagnosticvertical: %p\n",diagnosticvertical);
+	printf("   diagnosticstokes: %p\n",diagnosticstokes);
+	printf("   diagnostichutter: %p\n",diagnostichutter);
+	printf("   slope: %p\n",slope);
+	printf("   prognostic: %p\n",prognostic);
+	printf("   thermal: %p\n",thermal);
+	printf("   melting: %p\n",melting);
+	printf("   active: %p\n",active);
+
+}
+
+FemModel* Model::DiagnosticHorizontal(void){
+	return diagnostichorizontal;
+}
+FemModel* Model::DiagnosticVertical(void){
+	return diagnosticvertical;
+}
+FemModel* Model::DiagnosticStokes(void){
+	return diagnosticstokes;
+}
+FemModel* Model::DiagnosticHutter(void){
+	return diagnostichutter;
+}
+FemModel* Model::Slope(void){
+	return slope;
+}
+FemModel* Model::Prognostic(void){
+	return prognostic;
+}
+FemModel* Model::Thermal(void){
+	return thermal;
+}
+FemModel* Model::Melting(void){
+	return melting;
+}
+FemModel* Model::Active(void){
+	return active;
+}
+		
+void      Model::SetActive(FemModel* femmodel){
+	active=femmodel;
+}
Index: /issm/trunk/src/c/objects/Model.h
===================================================================
--- /issm/trunk/src/c/objects/Model.h	(revision 1843)
+++ /issm/trunk/src/c/objects/Model.h	(revision 1843)
@@ -0,0 +1,45 @@
+/*! \file Model.h 
+ *  \brief: header file for model object
+ */
+
+#ifndef _MODEL_H_
+#define _MODEL_H_
+
+struct FemModel;
+class Model{
+
+	private: 
+
+		/*femmodels for each formulation:*/
+		FemModel* diagnostichorizontal;
+		FemModel* diagnosticvertical;
+		FemModel* diagnosticstokes;
+		FemModel* diagnostichutter;
+		FemModel* slope;
+		FemModel* prognostic;
+		FemModel* thermal;
+		FemModel* melting;
+		
+		/*active one: */
+		FemModel* active;
+
+	public:
+
+		Model();
+		~Model();
+
+		void  Echo();
+		void  DeepEcho();
+		FemModel* DiagnosticHorizontal(void);
+		FemModel* DiagnosticVertical(void);
+		FemModel* DiagnosticStokes(void);
+		FemModel* DiagnosticHutter(void);
+		FemModel* Slope(void);
+		FemModel* Prognostic(void);
+		FemModel* Thermal(void);
+		FemModel* Melting(void);
+		FemModel* Active(void);
+		void      SetActive(FemModel* femmodel);
+
+};
+#endif  /* _MODEL_H */
Index: /issm/trunk/src/c/objects/OptArgs.h
===================================================================
--- /issm/trunk/src/c/objects/OptArgs.h	(revision 1842)
+++ /issm/trunk/src/c/objects/OptArgs.h	(revision 1843)
@@ -13,5 +13,5 @@
 
 	char* function_name;
-	mxArray* m;
+	mxArray* models;
 	mxArray* inputs;
 	mxArray* param_g;
@@ -29,5 +29,5 @@
 
 struct OptArgs{
-	FemModel* femmodel;
+	Model* model;
 	double* param_g;
 	double* grad_g;
Index: /issm/trunk/src/c/objects/Riftfront.cpp
===================================================================
--- /issm/trunk/src/c/objects/Riftfront.cpp	(revision 1842)
+++ /issm/trunk/src/c/objects/Riftfront.cpp	(revision 1843)
@@ -787,5 +787,5 @@
 	return this->material_converged;
 }
-		
+
 #undef __FUNCT__ 
 #define __FUNCT__ "Riftfront::OutputProperties"
Index: /issm/trunk/src/c/objects/objects.h
===================================================================
--- /issm/trunk/src/c/objects/objects.h	(revision 1842)
+++ /issm/trunk/src/c/objects/objects.h	(revision 1843)
@@ -28,4 +28,5 @@
 #include "./Element.h" 
 #include "./NodeSets.h"
+#include "./Model.h"
 
 /*C objects: */
