Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 15048)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 15049)
@@ -48,4 +48,6 @@
 					./classes/DataSet.h\
 					./classes/DataSet.cpp\
+					./classes/Contours.h\
+					./classes/Contours.cpp\
 					./classes/Nodes.h\
 					./classes/Nodes.cpp\
Index: /issm/trunk-jpl/src/c/classes/Contours.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Contours.cpp	(revision 15049)
+++ /issm/trunk-jpl/src/c/classes/Contours.cpp	(revision 15049)
@@ -0,0 +1,66 @@
+/*
+ * \file Contours.cpp
+ * \brief: Implementation of Contours class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Contours.h"
+#include "../shared/shared.h"
+#include "./Contour.h"
+
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+/*FUNCTION Contours::Contours(){{{*/
+Contours::Contours(){
+	enum_type=ContoursEnum;
+	return;
+}
+/*}}}*/
+/*FUNCTION Contours::~Contours(){{{*/
+Contours::~Contours(){
+	return;
+}
+/*}}}*/
+
+/*Numerics: */
+int ExpWrite(Contours* contours,char* domainname){/*{{{*/
+
+	/*I/O: */
+	FILE* fid=NULL;
+	Contour<double>* contour = NULL;
+
+	/*open domain outline file for writing: */
+	if((fid=fopen(domainname,"w"))==NULL) _error_("could not open domain file " << domainname); 
+
+	for(int counter=0;counter<contours->Size();counter++){
+		contour=(Contour<double>*)contours->GetObjectByOffset(counter);
+
+		/*Write header: */
+		fprintf(fid,"## Name:%s\n",domainname);
+		fprintf(fid,"## Icon:0\n");
+		fprintf(fid,"# Points Count	Value\n");
+		fprintf(fid,"%u %s\n",contour->nods  ,"1.");
+		fprintf(fid,"# X pos	Y pos\n");
+
+		/*Write vertices: */
+		for(int i=0;i<contour->nods;i++){
+			fprintf(fid,"%lf\t%lf\n",contour->x[i],contour->y[i]);
+		}
+
+		/*Write blank line: */
+		if(counter<contours->Size()-1) fprintf(fid,"\n");
+	}
+
+	/*close Exp file: */
+	fclose(fid);
+
+	return 1;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Contours.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Contours.h	(revision 15049)
+++ /issm/trunk-jpl/src/c/classes/Contours.h	(revision 15049)
@@ -0,0 +1,48 @@
+/*!\brief Declaration of Contours class.
+ */ 
+
+#ifndef _CONTAINER_CONTOURS_H_
+#define  _CONTAINER_CONTOURS_H_
+
+#include "./DataSet.h"
+
+class Contours: public DataSet{
+
+	public:
+
+		/*constructors, destructors*/
+		Contours();
+		~Contours();
+};
+
+/*Methods that relate to datasets: */
+int ExpWrite(Contours* contours,char* domainname);
+template <class doubletype> Contours* ExpRead(char* domainname){ /*{{{*/
+
+	/*intermediary: */
+	int                  nprof;
+	int                 *profnvertices = NULL;
+	doubletype         **pprofx        = NULL;
+	doubletype         **pprofy        = NULL;
+
+	/*output: */
+	Contours *domain = NULL;
+
+	/*If domainname is an empty string, return empty dataset*/
+	if (strcmp(domainname,"")==0){
+		nprof=0;
+	}
+	else{
+		ExpRead(&nprof,&profnvertices,&pprofx, &pprofy, NULL,domainname);
+	}
+
+	/*now create dataset of contours: */
+	domain=new Contours();
+
+	for(int i=0;i<nprof;i++){
+		domain->AddObject(new Contour<doubletype>(i,profnvertices[i],pprofx[i],pprofy[i],1));
+	}
+	return domain;
+} /*}}}*/
+
+#endif //ifndef _CONTOURS_H_
Index: /issm/trunk-jpl/src/c/classes/DataSet.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/DataSet.cpp	(revision 15048)
+++ /issm/trunk-jpl/src/c/classes/DataSet.cpp	(revision 15049)
@@ -248,37 +248,2 @@
 }
 /*}}}*/
-
-/*Routines that relate to datasets, but which are not methods: */
-int ExpWrite(DataSet* contours,char* domainname){/*{{{*/
-
-	/*I/O: */
-	FILE* fid=NULL;
-	Contour<double>* contour = NULL;
-
-	/*open domain outline file for writing: */
-	if((fid=fopen(domainname,"w"))==NULL) _error_("could not open domain file " << domainname); 
-
-	for(int counter=0;counter<contours->Size();counter++){
-		contour=(Contour<double>*)contours->GetObjectByOffset(counter);
-
-		/*Write header: */
-		fprintf(fid,"## Name:%s\n",domainname);
-		fprintf(fid,"## Icon:0\n");
-		fprintf(fid,"# Points Count	Value\n");
-		fprintf(fid,"%u %s\n",contour->nods  ,"1.");
-		fprintf(fid,"# X pos	Y pos\n");
-
-		/*Write vertices: */
-		for(int i=0;i<contour->nods;i++){
-			fprintf(fid,"%lf\t%lf\n",contour->x[i],contour->y[i]);
-		}
-
-		/*Write blank line: */
-		if(counter<contours->Size()-1) fprintf(fid,"\n");
-	}
-
-	/*close Exp file: */
-	fclose(fid);
-
-	return 1;
-}/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/DataSet.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/DataSet.h	(revision 15048)
+++ /issm/trunk-jpl/src/c/classes/DataSet.h	(revision 15049)
@@ -9,5 +9,4 @@
 /*forward declarations */
 class Object;
-class Results;
 
 /*! \brief Declaration of DataSet class
@@ -51,37 +50,6 @@
 		DataSet *Copy(void);
 		int      DeleteObject(Object *object);
-		Results *SpawnTriaResults(int *indices);
 
 };
 
-/*Methods that relate to datasets: */
-int ExpWrite(DataSet* contours,char* domainname);
-template <class doubletype> DataSet* ExpRead(char* domainname){ /*{{{*/
-
-	/*intermediary: */
-	int                  nprof;
-	int                 *profnvertices = NULL;
-	doubletype         **pprofx        = NULL;
-	doubletype         **pprofy        = NULL;
-
-	/*output: */
-	DataSet *domain = NULL;
-
-	/*If domainname is an empty string, return empty dataset*/
-	if (strcmp(domainname,"")==0){
-		nprof=0;
-	}
-	else{
-		ExpRead(&nprof,&profnvertices,&pprofx, &pprofy, NULL,domainname);
-	}
-
-	/*now create dataset of contours: */
-	domain=new DataSet(0);
-
-	for(int i=0;i<nprof;i++){
-		domain->AddObject(new Contour<doubletype>(i,profnvertices[i],pprofx[i],pprofy[i],1));
-	}
-	return domain;
-} /*}}}*/
-
 #endif
Index: /issm/trunk-jpl/src/c/classes/Elements/Elements.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Elements.h	(revision 15048)
+++ /issm/trunk-jpl/src/c/classes/Elements/Elements.h	(revision 15049)
@@ -10,4 +10,5 @@
 class Nodes;
 class Patch;
+class Results;
 
 /*! \brief Declaration of Elements class 
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15048)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15049)
@@ -13,4 +13,5 @@
 class  Object;
 class Parameters;
+class Results;
 class Inputs;
 class Input;
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15048)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15049)
@@ -14,4 +14,5 @@
 class Inputs;
 class IoModel;
+class Results;
 class Node;
 class Material;
Index: /issm/trunk-jpl/src/c/classes/classes.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/classes.h	(revision 15048)
+++ /issm/trunk-jpl/src/c/classes/classes.h	(revision 15049)
@@ -15,4 +15,5 @@
 #include "./Vertex.h"
 #include "./Nodes.h"
+#include "./Contours.h"
 #include "./Node.h"
 #include "./Profiler.h"
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15048)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15049)
@@ -319,4 +319,5 @@
 	MaterialsEnum,
 	NodesEnum,
+	ContoursEnum,
 	ParametersEnum,
 	VerticesEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15048)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15049)
@@ -321,4 +321,5 @@
 		case MaterialsEnum : return "Materials";
 		case NodesEnum : return "Nodes";
+		case ContoursEnum : return "Contours";
 		case ParametersEnum : return "Parameters";
 		case VerticesEnum : return "Vertices";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15048)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15049)
@@ -327,4 +327,5 @@
 	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
 	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
 	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
 	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
 	      else if (strcmp(name,"StokesIceFront")==0) return StokesIceFrontEnum;
-	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"StringParam")==0) return StringParamEnum;
+	      if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
 	      else if (strcmp(name,"TriaP1Input")==0) return TriaP1InputEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"PatchVertices")==0) return PatchVerticesEnum;
 	      else if (strcmp(name,"PentaP1ElementResult")==0) return PentaP1ElementResultEnum;
-	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"Step")==0) return StepEnum;
+	      if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+	      else if (strcmp(name,"Step")==0) return StepEnum;
 	      else if (strcmp(name,"Time")==0) return TimeEnum;
 	      else if (strcmp(name,"TriaP1ElementResult")==0) return TriaP1ElementResultEnum;
Index: /issm/trunk-jpl/src/m/enum/ContoursEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/ContoursEnum.m	(revision 15049)
+++ /issm/trunk-jpl/src/m/enum/ContoursEnum.m	(revision 15049)
@@ -0,0 +1,11 @@
+function macro=ContoursEnum()
+%CONTOURSENUM - Enum of Contours
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=ContoursEnum()
+
+macro=StringToEnum('Contours');
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15048)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15049)
@@ -4265,4 +4265,18 @@
 	return StringToEnum('Nodes')[0]
 
+def ContoursEnum():
+	"""
+	CONTOURSENUM - Enum of Contours
+
+	WARNING: DO NOT MODIFY THIS FILE
+				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+				Please read src/c/shared/Enum/README for more information
+
+	   Usage:
+	      macro=ContoursEnum()
+	"""
+
+	return StringToEnum('Contours')[0]
+
 def ParametersEnum():
 	"""
@@ -7763,4 +7777,4 @@
 	"""
 
-	return 553
-
+	return 554
+
Index: /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15048)
+++ /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15049)
@@ -9,3 +9,3 @@
 %      macro=MaximumNumberOfEnums()
 
-macro=553;
+macro=554;
Index: /issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.cpp	(revision 15048)
+++ /issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.cpp	(revision 15049)
@@ -101,6 +101,6 @@
 
 	/*output*/
-	DataSet* oldcontours = NULL;
-	DataSet* newcontours = NULL;
+	Contours* oldcontours = NULL;
+	Contours* newcontours = NULL;
 
 	/*Boot module: */
@@ -137,5 +137,5 @@
 	/*Read old contours and allocate new contours*/
 	oldcontours=ExpRead<double>(expfile);
-	newcontours=new DataSet(0);
+	newcontours=new Contours();
 	for(int counter=0;counter<oldcontours->Size();counter++){
 
Index: /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15048)
+++ /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15049)
@@ -640,5 +640,5 @@
 	int              numcontours,index,test1,test2;
 	char            *contourname = NULL;
-	DataSet         *contours    = NULL;
+	Contours         *contours    = NULL;
 	Contour<double> *contouri    = NULL;
 
@@ -649,5 +649,5 @@
 	else if(mxIsClass(dataref,"struct")){
 
-		contours=new DataSet(0);
+		contours=new Contours();
 		numcontours=mxGetNumberOfElements(dataref);
 
