Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 15066)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 15067)
@@ -21,6 +21,9 @@
 core_sources = ./main/issm.h\
 			   ./main/globals.h\
+			   ./datastructures/DataSet.h\
+					./datastructures/DataSet.cpp\
+					./datastructures/Object.h\
+					./datastructures/datastructures.h\
 					./classes/classes.h\
-					./classes/Object.h\
 					./classes/gauss/GaussTria.h\
 					./classes/gauss/GaussTria.cpp\
@@ -46,6 +49,4 @@
 					./classes/IoModel.h\
 					./classes/IoModel.cpp\
-					./classes/DataSet.h\
-					./classes/DataSet.cpp\
 					./classes/Contours.h\
 					./classes/Contours.cpp\
Index: /issm/trunk-jpl/src/c/bamg/BamgQuadtree.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/BamgQuadtree.cpp	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/BamgQuadtree.cpp	(revision 15067)
@@ -4,5 +4,5 @@
 
 #include "./bamgobjects.h"
-#include "../classes/DataSet.h"
+#include "../datastructures/datastructures.h"
 
 namespace bamg {
Index: /issm/trunk-jpl/src/c/bamg/BamgQuadtree.h
===================================================================
--- /issm/trunk-jpl/src/c/bamg/BamgQuadtree.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/BamgQuadtree.h	(revision 15067)
@@ -4,6 +4,5 @@
 
 #include "./include.h"
-#include "../classes/Object.h"
-class DataSet;
+#include "../datastructures/datastructures.h"
 
 namespace bamg {
Index: /issm/trunk-jpl/src/c/bamg/Curve.h
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Curve.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/Curve.h	(revision 15067)
@@ -2,5 +2,5 @@
 #define _CURVE_H_
 
-#include "../shared/Bamg/shared.h"
+#include "../shared/shared.h"
 
 namespace bamg {
Index: /issm/trunk-jpl/src/c/bamg/Edge.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Edge.cpp	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/Edge.cpp	(revision 15067)
@@ -7,5 +7,5 @@
 #include "Mesh.h"
 #include "Geometry.h"
-#include "../shared/io/Print/Print.h"
+#include "../shared/shared.h"
 
 namespace bamg {
Index: /issm/trunk-jpl/src/c/bamg/Edge.h
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Edge.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/Edge.h	(revision 15067)
@@ -3,5 +3,5 @@
 
 #include "./BamgVertex.h"
-#include "../shared/Exceptions/exceptions.h"
+#include "../shared/shared.h"
 #include "./GeomEdge.h"
 
Index: /issm/trunk-jpl/src/c/bamg/EigenMetric.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/EigenMetric.cpp	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/EigenMetric.cpp	(revision 15067)
@@ -5,5 +5,5 @@
 
 #include "Metric.h"
-#include "../shared/io/Print/Print.h"
+#include "../shared/shared.h"
 
 namespace bamg {
Index: /issm/trunk-jpl/src/c/bamg/GeomEdge.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/GeomEdge.cpp	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/GeomEdge.cpp	(revision 15067)
@@ -3,5 +3,5 @@
 #include <cmath>
 
-#include "../shared/Exceptions/exceptions.h"
+#include "../shared/shared.h"
 
 #include "GeomEdge.h"
Index: /issm/trunk-jpl/src/c/bamg/GeomVertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/GeomVertex.cpp	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/GeomVertex.cpp	(revision 15067)
@@ -5,5 +5,5 @@
 
 #include "GeomVertex.h"
-#include "../shared/Exceptions/exceptions.h"
+#include "../shared/shared.h"
 
 namespace bamg {
Index: /issm/trunk-jpl/src/c/bamg/Metric.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Metric.cpp	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/Metric.cpp	(revision 15067)
@@ -4,6 +4,5 @@
 
 #include "Metric.h"
-#include "../shared/Exceptions/exceptions.h"
-#include "../shared/io/Print/Print.h"
+#include "../shared/shared.h"
 
 using namespace std;
Index: /issm/trunk-jpl/src/c/bamg/Metric.h
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Metric.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/bamg/Metric.h	(revision 15067)
@@ -3,5 +3,5 @@
 
 #include "./include.h"
-#include "../shared/Bamg/shared.h"
+#include "../shared/shared.h"
 #include "R2.h"
 #include <math.h>
Index: /issm/trunk-jpl/src/c/classes/Bucket.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Bucket.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Bucket.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "./DataSet.h"
-#include "./Object.h"
+#include "../datastructures/datastructures.h"
 #include "../shared/MemOps/MemOps.h"
 #include "../toolkits/toolkitsenums.h"
Index: /issm/trunk-jpl/src/c/classes/Constraints/Constraint.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/Constraint.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Constraints/Constraint.h	(revision 15067)
@@ -11,5 +11,5 @@
 /*{{{*/
 class Nodes;
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 #include "../../toolkits/toolkits.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Constraints/Constraints.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/Constraints.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Constraints/Constraints.h	(revision 15067)
@@ -3,5 +3,5 @@
 
 /*forward declarations */
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 #include "../../shared/shared.h"
 
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../Object.h"
-class DataSet;
+#include "../../datastructures/datastructures.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../Object.h"
-class DataSet;
+#include "../../datastructures/datastructures.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../Object.h"
-class DataSet;
+#include "../../datastructures/datastructures.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Contour.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Contour.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Contour.h	(revision 15067)
@@ -8,9 +8,6 @@
 /*Headers:*/
 /*{{{*/
-#include "../shared/Exceptions/exceptions.h"
-#include "../shared/MemOps/MemOps.h"
-#include "../shared/io/io.h"
-#include "../shared/Enum/Enum.h"
-#include "./Object.h"
+#include "../shared/shared.h"
+#include "../datastructures/datastructures.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Contours.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Contours.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Contours.h	(revision 15067)
@@ -5,5 +5,6 @@
 #define  _CONTAINER_CONTOURS_H_
 
-#include "./DataSet.h"
+#include "../datastructures/datastructures.h"
+#include "./Contour.h"
 
 class Contours: public DataSet{
Index: sm/trunk-jpl/src/c/classes/DataSet.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/DataSet.cpp	(revision 15066)
+++ 	(revision )
@@ -1,249 +1,0 @@
-/*
- * \file DataSet.cpp
- * \brief: Implementation of DataSet class
- */
-
-/*Headers: {{{*/
-#ifdef HAVE_CONFIG_H
-	#include <config.h>
-#else
-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
-#endif
-
-#include <cstring>
-#include <vector>
-#include <functional>
-#include <algorithm>
-#include <iostream>
-
-#include "./DataSet.h"
-#include "../shared/shared.h"
-
-using namespace std;
-/*}}}*/
-
-/*Constructors/Destructors*/
-/*FUNCTION DataSet::DataSet(){{{*/
-DataSet::DataSet(){
-
-	sorted=0;
-	sorted_ids=NULL;
-	id_offsets=NULL;
-
-}
-/*}}}*/
-/*FUNCTION DataSet::DataSet(int dataset_enum){{{*/
-DataSet::DataSet(int dataset_enum){
-	enum_type=dataset_enum;
-
-	sorted=0;
-	sorted_ids=NULL;
-	id_offsets=NULL;
-
-}
-/*}}}*/
-/*FUNCTION DataSet::Copy{{{*/
-DataSet*   DataSet::Copy(void){
-
-	vector<Object*>::iterator object;
-	Object* object_copy=NULL;
-
-	DataSet* copy=new DataSet(enum_type);
-
-	copy->sorted=sorted;
-	copy->presorted=presorted;
-	if(sorted_ids){
-		copy->sorted_ids=xNew<int>(objects.size());
-		xMemCpy<int>(copy->sorted_ids,sorted_ids,objects.size());
-	}
-	if(id_offsets){
-		copy->id_offsets=xNew<int>(objects.size());
-		xMemCpy<int>(copy->id_offsets,id_offsets,objects.size());
-	}
-
-	/*Now we need to deep copy the objects: */
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		/*Call echo on object: */
-		object_copy = (*object)->copy();
-		copy->AddObject(object_copy);
-	}
-	return copy;
-}
-/*}}}*/
-/*FUNCTION DataSet::~DataSet{{{*/
-DataSet::~DataSet(){
-	clear();
-	xDelete<int>(sorted_ids);
-	xDelete<int>(id_offsets);
-}
-/*}}}*/
-
-/*Specific methods*/
-/*FUNCTION DataSet::AddObject{{{*/
-int  DataSet::AddObject(Object* object){
-
-	_assert_(this);
-	objects.push_back(object);
-
-	return 1;
-}
-/*}}}*/
-/*FUNCTION DataSet::clear{{{*/
-void  DataSet::clear(){
-
-/*  use reverse_iterator for efficiency in matlab memory manager
-	(keeping old code in case it needs to revert back)  */
-
-//	vector<Object*>::iterator object;
-	vector<Object*>::reverse_iterator object;
-
-//	for ( object=objects.begin() ; object < objects.end(); object++ ){
-//		delete (*object);
-//	}
-	for ( object=objects.rbegin() ; object < objects.rend(); object++ ){
-		delete (*object);
-	}
-	objects.clear();
-}
-/*}}}*/
-/*FUNCTION DataSet::DeleteObject{{{*/
-int  DataSet::DeleteObject(Object* object){
-
-	vector<Object*>::iterator iterator;
-
-	if(object){
-		iterator = find(objects.begin(), objects.end(),object);
-		delete *iterator;
-		objects.erase(iterator);
-	}
-
-	return 1;
-
-}
-/*}}}*/
-/*FUNCTION DataSet::DeepEcho{{{*/
-void DataSet::DeepEcho(){
-
-	vector<Object*>::iterator object;
-
-	if(this==NULL)_error_("trying to echo a NULL dataset");
-
-	_pprintLine_("DataSet echo: " << objects.size() << " objects");
-
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		/*Call deep echo on object: */
-		(*object)->DeepEcho();
-
-	}
-}
-/*}}}*/
-/*FUNCTION DataSet::Echo{{{*/
-void DataSet::Echo(){
-
-	vector<Object*>::iterator object;
-
-	if(this==NULL)_error_("trying to echo a NULL dataset");
-
-	_pprintLine_("DataSet echo: " << objects.size() << " objects");
-
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		/*Call echo on object: */
-		(*object)->Echo();
-
-	}
-	return;
-}
-/*}}}*/
-/*FUNCTION DataSet::GetEnum(){{{*/
-int  DataSet::GetEnum(){
-	return enum_type;
-}
-/*}}}*/
-/*FUNCTION DataSet::GetEnum(int offset){{{*/
-int   DataSet::GetEnum(int offset){
-
-	return objects[offset]->ObjectEnum();
-
-}
-/*}}}*/
-/*FUNCTION DataSet::GetObjectByOffset{{{*/
-Object* DataSet::GetObjectByOffset(int offset){
-
-	/*Check index in debugging mode*/
-	_assert_(this!=NULL);
-	_assert_(offset>=0);
-	_assert_(offset<this->Size());
-
-	return objects[offset];
-
-}
-/*}}}*/
-/*FUNCTION DataSet::GetObjectById{{{*/
-Object* DataSet::GetObjectById(int* poffset,int eid){
-
-	int id_offset;
-	int offset;
-
-	_assert_(this);
-	if(!sorted)_error_("trying to binary search on a non-sorted dataset!");
-
-	/*Carry out a binary search on the sorted_ids: */
-	if(!binary_search(&id_offset,eid,sorted_ids,objects.size())){
-		_error_("could not find object with id " << eid << " in DataSet " << EnumToStringx(enum_type));
-	}
-
-	/*Convert  the id offset into sorted offset: */
-	offset=id_offsets[id_offset];
-
-	/*Assign output pointers if requested:*/
-	if(poffset)*poffset=offset;
-
-	/*Return object at offset position in objects :*/
-	return objects[offset];
-}
-/*}}}*/
-/*FUNCTION DataSet::Presort{{{*/
-void DataSet::Presort(){
-
-	/*vector of objects is already sorted, just allocate the sorted ids and their
-	 * offsets:*/
-	if(objects.size()){
-
-		/*Delete existing ids*/
-		xDelete<int>(sorted_ids);
-		xDelete<int>(id_offsets);
-
-		/*Allocate new ids*/
-		sorted_ids=xNew<int>(objects.size());
-		id_offsets=xNew<int>(objects.size());
-
-		/*Build id_offsets and sorted_ids*/
-		for(int i=0;i<objects.size();i++){
-			id_offsets[i]=i;
-			sorted_ids[i]=objects[i]->Id();
-		}
-	}
-
-	/*set sorted flag: */
-	sorted=1;
-}
-/*}}}*/
-/*FUNCTION DataSet::Size{{{*/
-int  DataSet::Size(void){
-	_assert_(this!=NULL);
-
-	return objects.size();
-}
-/*}}}*/
-/*FUNCTION DataSet::Sort{{{*/
-void DataSet::Sort(){
-
-	/*Only sort if we are not already sorted: */
-	if(!sorted){
-		_error_("not implemented yet!");
-	}
-}
-/*}}}*/
Index: sm/trunk-jpl/src/c/classes/DataSet.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/DataSet.h	(revision 15066)
+++ 	(revision )
@@ -1,55 +1,0 @@
-#ifndef _CONTAINER_DATASET_H_
-#define _CONTAINER_DATASET_H_
-
-#include <vector>
-#include <cstring>
-#include "./Contour.h"
-#include "../shared/Exp/exp.h"
-
-/*forward declarations */
-class Object;
-
-/*! \brief Declaration of DataSet class
- *
- * Declaration of DataSet class.  A DataSet is a Container of Objects.
- */
-class DataSet{
-
-	public: 
-
-		/*internals: */
-		std::vector<Object*> objects;
-
-		/*type of dataset: */
-		int             enum_type;
-
-		/*sorting: */
-		int             sorted;
-		int             presorted;
-		int*            sorted_ids;
-		int*            id_offsets;
-
-		/*constructors, destructors*/
-		DataSet();
-		DataSet(int enum_type);
-		~DataSet();
-
-		/*management*/
-		int      GetEnum();
-		int      GetEnum(int offset);
-		void     Echo();
-		void     DeepEcho();
-		int      AddObject(Object *object);
-		int      DeleteObject(int id);
-		int      Size();
-		void     clear();
-		Object  *GetObjectByOffset(int  offset);
-		Object  *GetObjectById(int *poffset,int eid);
-		void     Presort();
-		void     Sort();
-		DataSet *Copy(void);
-		int      DeleteObject(Object *object);
-
-};
-
-#endif
Index: /issm/trunk-jpl/src/c/classes/DependentObject.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/DependentObject.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/DependentObject.h	(revision 15067)
@@ -7,5 +7,5 @@
 
 /*{{{*/
-#include "./Object.h"
+#include "../datastructures/datastructures.h"
 #include "../shared/shared.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 15067)
@@ -7,5 +7,5 @@
 
 /*Headers:*/
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 class Patch;
 class Parameters;
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 15067)
@@ -10,5 +10,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 #include "../Update.h"
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Elements.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Elements.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Elements/Elements.h	(revision 15067)
@@ -3,5 +3,5 @@
 
 /*forward declarations */
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 class Materials;
 class Parameters;
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h	(revision 15067)
@@ -15,5 +15,5 @@
 #endif
 
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 #include "../Node.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/Results.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/Results.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/Results.h	(revision 15067)
@@ -2,5 +2,5 @@
 #define  _CONTAINER_RESULTS_H_
 
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 
 /*forward declarations */
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 15067)
@@ -8,5 +8,4 @@
 /*Headers:*/
 /*{{{*/
-#include "./Object.h"
 #include "../toolkits/toolkits.h"
 class DataSet;
Index: /issm/trunk-jpl/src/c/classes/Hook.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Hook.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Hook.h	(revision 15067)
@@ -11,6 +11,5 @@
 /*Headers:*/
 /*{{{*/
-#include "./Object.h"
-class DataSet;
+#include "../datastructures/datastructures.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/IndependentObject.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/IndependentObject.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/IndependentObject.h	(revision 15067)
@@ -7,5 +7,5 @@
 
 /*{{{*/
-#include "./Object.h"
+#include "../datastructures/datastructures.h"
 #include "../shared/shared.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 15067)
@@ -8,5 +8,6 @@
 /*Headers:*/
 /*{{{*/
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
+#include "../../shared/shared.h"
 class Node;
 class ElementResult;
@@ -15,5 +16,4 @@
 class GaussPenta;
 template <class doubletype> class Vector;
-#include "../../shared/shared.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 15067)
@@ -6,5 +6,5 @@
 class Input;
 
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 #include "../../shared/shared.h"
 
Index: /issm/trunk-jpl/src/c/classes/KML/KMLFileReadUtils.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KMLFileReadUtils.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KMLFileReadUtils.h	(revision 15067)
@@ -7,7 +7,6 @@
 
 /*Headers:{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
-#include "../Object.h"
+#include "../../shared/shared.h"
+#include "../../datastructures/datastructures.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/KML/KML_Attribute.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_Attribute.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_Attribute.h	(revision 15067)
@@ -7,7 +7,6 @@
 
 /*Headers:{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
-#include "../Object.h"
+#include "../../shared/shared.h"
+#include "../../datastructures/datastructures.h"
 class DataSet;
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/KML/KML_Comment.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_Comment.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_Comment.h	(revision 15067)
@@ -7,7 +7,6 @@
 
 /*Headers:{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
-#include "../Object.h"
+#include "../../shared/shared.h"
+#include "../../datastructures/datastructures.h"
 class DataSet;
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/KML/KML_Feature.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_Feature.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_Feature.h	(revision 15067)
@@ -13,6 +13,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 #include "./KML_Object.h"
 class KML_Style;
Index: /issm/trunk-jpl/src/c/classes/KML/KML_Geometry.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_Geometry.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_Geometry.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 #include "./KML_Object.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/KML/KML_Icon.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_Icon.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_Icon.h	(revision 15067)
@@ -14,6 +14,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 #include "./KML_Object.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/KML/KML_LatLonBox.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_LatLonBox.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_LatLonBox.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 #include "./KML_Object.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/KML/KML_Object.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_Object.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_Object.h	(revision 15067)
@@ -7,8 +7,6 @@
 
 /*Headers:{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
-#include "../Object.h"
-class DataSet;
+#include "../../shared/shared.h"
+#include "../../datastructures/datastructures.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/KML/KML_StyleSelector.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_StyleSelector.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_StyleSelector.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 #include "./KML_Object.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/KML/KML_SubStyle.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_SubStyle.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_SubStyle.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 #include "./KML_Object.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/KML/KML_Unknown.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/KML/KML_Unknown.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/KML/KML_Unknown.h	(revision 15067)
@@ -8,6 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 #include "./KML_Object.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Loads/Load.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Load.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Loads/Load.h	(revision 15067)
@@ -20,5 +20,5 @@
 class Parameters;
 
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 #include "../Update.h"
 
Index: /issm/trunk-jpl/src/c/classes/Loads/Loads.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Loads.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Loads/Loads.h	(revision 15067)
@@ -3,5 +3,5 @@
 
 /*forward declarations */
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 class Materials;
 class Parameters;
Index: /issm/trunk-jpl/src/c/classes/Materials/Material.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 15067)
@@ -10,5 +10,5 @@
 class Inputs;
 template <class doubletype> class Vector;
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 #include "../Update.h"
 class Elements;
Index: /issm/trunk-jpl/src/c/classes/Materials/Materials.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Materials.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Materials/Materials.h	(revision 15067)
@@ -3,5 +3,5 @@
 
 /*forward declarations */
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 class Parameters;
 class Elements;
Index: /issm/trunk-jpl/src/c/classes/Node.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Node.h	(revision 15067)
@@ -8,5 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "./Object.h"
+#include "../datastructures/datastructures.h"
 #include "../shared/shared.h"
 #include "./DofIndexing.h"
Index: /issm/trunk-jpl/src/c/classes/Nodes.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Nodes.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Nodes.h	(revision 15067)
@@ -2,5 +2,5 @@
 #define  _CONTAINER_NODES_H_
 
-#include "./DataSet.h"
+#include "../datastructures/datastructures.h"
 class Parameters;
 class Elements;
Index: sm/trunk-jpl/src/c/classes/Object.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Object.h	(revision 15066)
+++ 	(revision )
@@ -1,25 +1,0 @@
-/*
- * Object.h:
- * \brief prototype for abstract Object class
- * \file Object.h
- * This prototype describes the Object class. This is an abstract class, parent 
- * to any other objects (Quad, Tria, Node , etc ...), that can be included in a 
- * DataSet.
- */
-
-#ifndef _OBJECT_H_
-#define _OBJECT_H_
-
-class Object {
-
-	public: 
-
-		virtual       ~Object() {};
-		virtual void  Echo()=0;
-		virtual void  DeepEcho()=0;
-		virtual int   Id()=0;
-		virtual int   ObjectEnum()=0;
-		virtual Object* copy()=0;
-
-};
-#endif
Index: /issm/trunk-jpl/src/c/classes/Options/GenericOption.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Options/GenericOption.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Options/GenericOption.h	(revision 15067)
@@ -15,6 +15,6 @@
 #include <cstring>
 #include "../../shared/shared.h"
+#include "../../datastructures/datastructures.h"
 #include "./OptionUtilities.h"
-#include "../Object.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Options/Option.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Options/Option.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Options/Option.h	(revision 15067)
@@ -7,7 +7,6 @@
 
 /*Headers:{{{*/
-#include "../../shared/Exceptions/exceptions.h"
-#include "../../shared/Enum/Enum.h"
-#include "../Object.h"
+#include "../../shared/shared.h"
+#include "../../datastructures/datastructures.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Options/Options.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Options/Options.cpp	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Options/Options.cpp	(revision 15067)
@@ -15,6 +15,6 @@
 #include <cstring>
 
-#include "../DataSet.h"
 #include "./Options.h"
+#include "../../datastructures/datastructures.h"
 #include "../../shared/shared.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Options/Options.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Options/Options.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Options/Options.h	(revision 15067)
@@ -4,5 +4,5 @@
 /*forward declarations */
 class Option;
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 #include "./GenericOption.h"
 
Index: /issm/trunk-jpl/src/c/classes/Params/Param.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/Param.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Params/Param.h	(revision 15067)
@@ -15,5 +15,5 @@
 #endif
 
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 #include "../Node.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Params/Parameters.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/Parameters.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Params/Parameters.h	(revision 15067)
@@ -6,5 +6,5 @@
 template <class doublematrix> class Matrix;
 template <class doubletype> class Vector;
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 #include "../../shared/shared.h"
 
Index: /issm/trunk-jpl/src/c/classes/Profiler.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Profiler.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Profiler.h	(revision 15067)
@@ -8,5 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "./Object.h"
+#include "../datastructures/datastructures.h"
 #include "../shared/shared.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Segment.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Segment.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Segment.h	(revision 15067)
@@ -8,5 +8,5 @@
 /*Headers:*/
 /*{{{*/
-#include "./Object.h"
+#include "../datastructures/datastructures.h"
 #include "../shared/Numerics/constants.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Vertices.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertices.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/Vertices.h	(revision 15067)
@@ -3,5 +3,5 @@
 
 /*forward declarations */
-#include "./DataSet.h"
+#include "../datastructures/datastructures.h"
 #include "../shared/shared.h"
 
Index: /issm/trunk-jpl/src/c/classes/classes.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/classes.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/classes.h	(revision 15067)
@@ -5,8 +5,4 @@
 #ifndef _ALL_CLASSES_H_
 #define _ALL_CLASSES_H_
-
-/*Abstract classes: */
-#include "./Object.h"
-#include "./DataSet.h"
 
 /*Objects: */
Index: /issm/trunk-jpl/src/c/classes/kriging/Observation.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/Observation.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/kriging/Observation.h	(revision 15067)
@@ -6,5 +6,5 @@
 #define _OBSERVATION_H_
 
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 
 class Observation: public Object{
Index: /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 15067)
@@ -16,8 +16,8 @@
 #include <iostream>
 
-#include "../DataSet.h"
 #include "../Options/Options.h"
 #include "./Observations.h"
 #include "./Observation.h"
+#include "../../datastructures/datastructures.h"
 #include "../../shared/shared.h"
 
Index: /issm/trunk-jpl/src/c/classes/kriging/Observations.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/Observations.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/kriging/Observations.h	(revision 15067)
@@ -5,5 +5,5 @@
 class Variogram;
 class Options;
-#include "../DataSet.h"
+#include "../../datastructures/datastructures.h"
 #include "../../shared/shared.h"
 
Index: /issm/trunk-jpl/src/c/classes/kriging/Variogram.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/Variogram.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/kriging/Variogram.h	(revision 15067)
@@ -6,5 +6,5 @@
 #define _VARIOGRAM_H_
 
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 
 class Variogram: public Object{
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.h	(revision 15067)
@@ -11,7 +11,7 @@
 /*Headers:*/
 /*{{{*/
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 #include "../../toolkits/toolkits.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 class Node;
 template <class doublematrix> class Matrix;
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementVector.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementVector.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementVector.h	(revision 15067)
@@ -11,7 +11,7 @@
 /*Headers:*/
 /*{{{*/
-#include "../Object.h"
+#include "../../datastructures/datastructures.h"
 #include "../../toolkits/toolkits.h"
-#include "../../shared/Enum/Enum.h"
+#include "../../shared/shared.h"
 class Node;
 template <class doubletype> class Vector;
Index: /issm/trunk-jpl/src/c/datastructures/DataSet.cpp
===================================================================
--- /issm/trunk-jpl/src/c/datastructures/DataSet.cpp	(revision 15067)
+++ /issm/trunk-jpl/src/c/datastructures/DataSet.cpp	(revision 15067)
@@ -0,0 +1,249 @@
+/*
+ * \file DataSet.cpp
+ * \brief: Implementation of DataSet class
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include <cstring>
+#include <vector>
+#include <functional>
+#include <algorithm>
+#include <iostream>
+
+#include "../datastructures/datastructures.h"
+#include "../shared/shared.h"
+
+using namespace std;
+/*}}}*/
+
+/*Constructors/Destructors*/
+/*FUNCTION DataSet::DataSet(){{{*/
+DataSet::DataSet(){
+
+	sorted=0;
+	sorted_ids=NULL;
+	id_offsets=NULL;
+
+}
+/*}}}*/
+/*FUNCTION DataSet::DataSet(int dataset_enum){{{*/
+DataSet::DataSet(int dataset_enum){
+	enum_type=dataset_enum;
+
+	sorted=0;
+	sorted_ids=NULL;
+	id_offsets=NULL;
+
+}
+/*}}}*/
+/*FUNCTION DataSet::Copy{{{*/
+DataSet*   DataSet::Copy(void){
+
+	vector<Object*>::iterator object;
+	Object* object_copy=NULL;
+
+	DataSet* copy=new DataSet(enum_type);
+
+	copy->sorted=sorted;
+	copy->presorted=presorted;
+	if(sorted_ids){
+		copy->sorted_ids=xNew<int>(objects.size());
+		xMemCpy<int>(copy->sorted_ids,sorted_ids,objects.size());
+	}
+	if(id_offsets){
+		copy->id_offsets=xNew<int>(objects.size());
+		xMemCpy<int>(copy->id_offsets,id_offsets,objects.size());
+	}
+
+	/*Now we need to deep copy the objects: */
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Call echo on object: */
+		object_copy = (*object)->copy();
+		copy->AddObject(object_copy);
+	}
+	return copy;
+}
+/*}}}*/
+/*FUNCTION DataSet::~DataSet{{{*/
+DataSet::~DataSet(){
+	clear();
+	xDelete<int>(sorted_ids);
+	xDelete<int>(id_offsets);
+}
+/*}}}*/
+
+/*Specific methods*/
+/*FUNCTION DataSet::AddObject{{{*/
+int  DataSet::AddObject(Object* object){
+
+	_assert_(this);
+	objects.push_back(object);
+
+	return 1;
+}
+/*}}}*/
+/*FUNCTION DataSet::clear{{{*/
+void  DataSet::clear(){
+
+/*  use reverse_iterator for efficiency in matlab memory manager
+	(keeping old code in case it needs to revert back)  */
+
+//	vector<Object*>::iterator object;
+	vector<Object*>::reverse_iterator object;
+
+//	for ( object=objects.begin() ; object < objects.end(); object++ ){
+//		delete (*object);
+//	}
+	for ( object=objects.rbegin() ; object < objects.rend(); object++ ){
+		delete (*object);
+	}
+	objects.clear();
+}
+/*}}}*/
+/*FUNCTION DataSet::DeleteObject{{{*/
+int  DataSet::DeleteObject(Object* object){
+
+	vector<Object*>::iterator iterator;
+
+	if(object){
+		iterator = find(objects.begin(), objects.end(),object);
+		delete *iterator;
+		objects.erase(iterator);
+	}
+
+	return 1;
+
+}
+/*}}}*/
+/*FUNCTION DataSet::DeepEcho{{{*/
+void DataSet::DeepEcho(){
+
+	vector<Object*>::iterator object;
+
+	if(this==NULL)_error_("trying to echo a NULL dataset");
+
+	_pprintLine_("DataSet echo: " << objects.size() << " objects");
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Call deep echo on object: */
+		(*object)->DeepEcho();
+
+	}
+}
+/*}}}*/
+/*FUNCTION DataSet::Echo{{{*/
+void DataSet::Echo(){
+
+	vector<Object*>::iterator object;
+
+	if(this==NULL)_error_("trying to echo a NULL dataset");
+
+	_pprintLine_("DataSet echo: " << objects.size() << " objects");
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Call echo on object: */
+		(*object)->Echo();
+
+	}
+	return;
+}
+/*}}}*/
+/*FUNCTION DataSet::GetEnum(){{{*/
+int  DataSet::GetEnum(){
+	return enum_type;
+}
+/*}}}*/
+/*FUNCTION DataSet::GetEnum(int offset){{{*/
+int   DataSet::GetEnum(int offset){
+
+	return objects[offset]->ObjectEnum();
+
+}
+/*}}}*/
+/*FUNCTION DataSet::GetObjectByOffset{{{*/
+Object* DataSet::GetObjectByOffset(int offset){
+
+	/*Check index in debugging mode*/
+	_assert_(this!=NULL);
+	_assert_(offset>=0);
+	_assert_(offset<this->Size());
+
+	return objects[offset];
+
+}
+/*}}}*/
+/*FUNCTION DataSet::GetObjectById{{{*/
+Object* DataSet::GetObjectById(int* poffset,int eid){
+
+	int id_offset;
+	int offset;
+
+	_assert_(this);
+	if(!sorted)_error_("trying to binary search on a non-sorted dataset!");
+
+	/*Carry out a binary search on the sorted_ids: */
+	if(!binary_search(&id_offset,eid,sorted_ids,objects.size())){
+		_error_("could not find object with id " << eid << " in DataSet " << EnumToStringx(enum_type));
+	}
+
+	/*Convert  the id offset into sorted offset: */
+	offset=id_offsets[id_offset];
+
+	/*Assign output pointers if requested:*/
+	if(poffset)*poffset=offset;
+
+	/*Return object at offset position in objects :*/
+	return objects[offset];
+}
+/*}}}*/
+/*FUNCTION DataSet::Presort{{{*/
+void DataSet::Presort(){
+
+	/*vector of objects is already sorted, just allocate the sorted ids and their
+	 * offsets:*/
+	if(objects.size()){
+
+		/*Delete existing ids*/
+		xDelete<int>(sorted_ids);
+		xDelete<int>(id_offsets);
+
+		/*Allocate new ids*/
+		sorted_ids=xNew<int>(objects.size());
+		id_offsets=xNew<int>(objects.size());
+
+		/*Build id_offsets and sorted_ids*/
+		for(int i=0;i<objects.size();i++){
+			id_offsets[i]=i;
+			sorted_ids[i]=objects[i]->Id();
+		}
+	}
+
+	/*set sorted flag: */
+	sorted=1;
+}
+/*}}}*/
+/*FUNCTION DataSet::Size{{{*/
+int  DataSet::Size(void){
+	_assert_(this!=NULL);
+
+	return objects.size();
+}
+/*}}}*/
+/*FUNCTION DataSet::Sort{{{*/
+void DataSet::Sort(){
+
+	/*Only sort if we are not already sorted: */
+	if(!sorted){
+		_error_("not implemented yet!");
+	}
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/datastructures/DataSet.h
===================================================================
--- /issm/trunk-jpl/src/c/datastructures/DataSet.h	(revision 15067)
+++ /issm/trunk-jpl/src/c/datastructures/DataSet.h	(revision 15067)
@@ -0,0 +1,53 @@
+#ifndef _CONTAINER_DATASET_H_
+#define _CONTAINER_DATASET_H_
+
+#include <vector>
+#include <cstring>
+
+/*forward declarations */
+class Object;
+
+/*! \brief Declaration of DataSet class
+ *
+ * Declaration of DataSet class.  A DataSet is a Container of Objects.
+ */
+class DataSet{
+
+	public: 
+
+		/*internals: */
+		std::vector<Object*> objects;
+
+		/*type of dataset: */
+		int             enum_type;
+
+		/*sorting: */
+		int             sorted;
+		int             presorted;
+		int*            sorted_ids;
+		int*            id_offsets;
+
+		/*constructors, destructors*/
+		DataSet();
+		DataSet(int enum_type);
+		~DataSet();
+
+		/*management*/
+		int      GetEnum();
+		int      GetEnum(int offset);
+		void     Echo();
+		void     DeepEcho();
+		int      AddObject(Object *object);
+		int      DeleteObject(int id);
+		int      Size();
+		void     clear();
+		Object  *GetObjectByOffset(int  offset);
+		Object  *GetObjectById(int *poffset,int eid);
+		void     Presort();
+		void     Sort();
+		DataSet *Copy(void);
+		int      DeleteObject(Object *object);
+
+};
+
+#endif
Index: /issm/trunk-jpl/src/c/datastructures/Object.h
===================================================================
--- /issm/trunk-jpl/src/c/datastructures/Object.h	(revision 15067)
+++ /issm/trunk-jpl/src/c/datastructures/Object.h	(revision 15067)
@@ -0,0 +1,25 @@
+/*
+ * Object.h:
+ * \brief prototype for abstract Object class
+ * \file Object.h
+ * This prototype describes the Object class. This is an abstract class, parent 
+ * to any other objects (Quad, Tria, Node , etc ...), that can be included in a 
+ * DataSet.
+ */
+
+#ifndef _OBJECT_H_
+#define _OBJECT_H_
+
+class Object {
+
+	public: 
+
+		virtual       ~Object() {};
+		virtual void  Echo()=0;
+		virtual void  DeepEcho()=0;
+		virtual int   Id()=0;
+		virtual int   ObjectEnum()=0;
+		virtual Object* copy()=0;
+
+};
+#endif
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 15066)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 15067)
@@ -19,5 +19,5 @@
 
 #include "../../shared/shared.h"
-#include "../../classes/DataSet.h"
+#include "../../datastructures/datastructures.h"
 #include "../../classes/Bucket.h"
 #include "../mumps/mumpsincludes.h"
