Index: /issm/trunk/src/c/Container/Elements.cpp
===================================================================
--- /issm/trunk/src/c/Container/Elements.cpp	(revision 9877)
+++ /issm/trunk/src/c/Container/Elements.cpp	(revision 9878)
@@ -171,4 +171,6 @@
 void Elements::ToResults(Results* results,Parameters* parameters,int step, double time){
 
+	extern int my_rank;
+
 	Patch  *patch        = NULL;
 	int    *resultsenums = NULL;
@@ -194,4 +196,5 @@
 		/*Loop over all results and get nodal vector*/
 		for(int i=0;i<numberofresults;i++){
+			printf("%s\n",EnumToStringx(resultsenums[i]));
 
 			/*Get vector for result number i*/
@@ -206,5 +209,7 @@
 			/*Serialize and add to results*/
 			VecToMPISerial(&vector_serial,vector);
-			results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,numberofvertices,step,time));
+			if(my_rank==0){
+				results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,numberofvertices,step,time));
+			}
 
 			/*clean up*/
@@ -212,5 +217,4 @@
 			xfree((void**)&vector_serial);
 		}
-
 	}
 	else{
Index: /issm/trunk/src/c/objects/ElementResults/BoolElementResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ElementResults/BoolElementResult.cpp	(revision 9877)
+++ /issm/trunk/src/c/objects/ElementResults/BoolElementResult.cpp	(revision 9878)
@@ -184,2 +184,16 @@
 }
 /*}}}*/
+/*FUNCTION BoolElementResult::GetVectorFromResults{{{1*/
+void BoolElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
+
+	double *doublevalues=NULL;
+
+	/*Cast value to double vector*/
+	doublevalues=(double*)xmalloc(numdofs*sizeof(double));
+	for(int i=0;i<numdofs;i++) doublevalues[i]=double(this->value);
+
+	VecSetValues(vector,numdofs,doflist,(const double*)doublevalues,INSERT_VALUES);
+
+	/*cleanup*/
+	xfree((void**)&doublevalues);
+} /*}}}*/
Index: /issm/trunk/src/c/objects/ElementResults/BoolElementResult.h
===================================================================
--- /issm/trunk/src/c/objects/ElementResults/BoolElementResult.h	(revision 9877)
+++ /issm/trunk/src/c/objects/ElementResults/BoolElementResult.h	(revision 9878)
@@ -51,4 +51,5 @@
 		/*BoolElementResult management: {{{1*/
 		int   EnumType();
+		void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ElementResults/DoubleElementResult.h
===================================================================
--- /issm/trunk/src/c/objects/ElementResults/DoubleElementResult.h	(revision 9877)
+++ /issm/trunk/src/c/objects/ElementResults/DoubleElementResult.h	(revision 9878)
@@ -51,4 +51,5 @@
 		/*DoubleElementResult management: {{{1*/
 		int   EnumType();
+		void GetVectorFromResults(Vec vector,int* doflist,int numdofs){_error_("not implemented");};
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ElementResults/ElementResult.h
===================================================================
--- /issm/trunk/src/c/objects/ElementResults/ElementResult.h	(revision 9877)
+++ /issm/trunk/src/c/objects/ElementResults/ElementResult.h	(revision 9878)
@@ -23,4 +23,5 @@
 		virtual void    PatchFill(int row, Patch* patch)=0;
 		virtual int     EnumType()=0;
+		virtual void    GetVectorFromResults(Vec vector,int* doflist,int numdof)=0;
 
 };
Index: /issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.cpp	(revision 9877)
+++ /issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.cpp	(revision 9878)
@@ -195,8 +195,8 @@
 /*}}}*/
 /*FUNCTION PentaVertexElementResult::GetVectorFromResults{{{1*/
-void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist){
-
-	const int numvertices=6;
-	VecSetValues(vector,numvertices,doflist,(const double*)this->values,INSERT_VALUES);
+void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
+
+	if(numdofs!=6)_error_("Result %s is a PentaVertexElementResult and cannot write vector of %i dofs",numdofs);
+	VecSetValues(vector,numdofs,doflist,(const double*)this->values,INSERT_VALUES);
 
 } /*}}}*/
Index: /issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.h
===================================================================
--- /issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.h	(revision 9877)
+++ /issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.h	(revision 9878)
@@ -50,5 +50,5 @@
 		/*PentaVertexElementResult management: {{{1*/
 		int   EnumType();
-		void GetVectorFromResults(Vec vector,int* doflist);
+		void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.cpp	(revision 9877)
+++ /issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.cpp	(revision 9878)
@@ -184,8 +184,8 @@
 /*}}}*/
 /*FUNCTION TriaVertexElementResult::GetVectorFromResults{{{1*/
-void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist){
+void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist,int numdofs){
 
-	const int numvertices=3;
-	VecSetValues(vector,numvertices,doflist,(const double*)this->values,INSERT_VALUES);
+	if(numdofs!=3)_error_("Result %s is a TriaVertexElementResult and cannot write vector of %i dofs",numdofs);
+	VecSetValues(vector,numdofs,doflist,(const double*)this->values,INSERT_VALUES);
 
 } /*}}}*/
Index: /issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.h
===================================================================
--- /issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.h	(revision 9877)
+++ /issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.h	(revision 9878)
@@ -49,5 +49,5 @@
 		/*TriaVertexElementResult management: {{{1*/
 		int   EnumType();
-		void GetVectorFromResults(Vec vector,int* doflist);
+		void GetVectorFromResults(Vec vector,int* doflist,int numdofs);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9877)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9878)
@@ -1129,5 +1129,4 @@
 void  Penta::GetVectorFromResults(Vec vector,int result_enum){
 
-	bool found=false;
 	int doflist1[NUMVERTICES];
 
@@ -1139,10 +1138,9 @@
 		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
 		if(elementresult->EnumType()!=result_enum) continue;
-		if(elementresult->Enum()    !=PentaVertexElementResultEnum) _error_("Result %s found but is not of class PentaVertexElementResultEnum");
-
-		found=true;
-		PentaVertexElementResult* result=(PentaVertexElementResult*)elementresult;
-		result->GetVectorFromResults(vector,&doflist1[0]);
-	}
+		elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES);
+		return;
+	}
+
+	_error_("Result %s not found in element",EnumToStringx(result_enum));
 }
 /*}}}*/
@@ -2028,5 +2026,5 @@
 	int     i;
 	int     numberofresults = 0;
-	int     *resultsenums =NULL;
+	int     *resultsenums   = NULL;
 
 	/*Checks*/
@@ -2039,11 +2037,14 @@
 	}
 
-	/*Allocate output*/
-	resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
-
-	/*populate enums*/
-	for(i=0;i<this->results->Size();i++){
-		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
-		resultsenums[i]=elementresult->EnumType();
+	if(numberofresults){
+
+		/*Allocate output*/
+		resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
+
+		/*populate enums*/
+		for(i=0;i<this->results->Size();i++){
+			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+			resultsenums[i]=elementresult->EnumType();
+		}
 	}
 
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9877)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9878)
@@ -1320,10 +1320,9 @@
 		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
 		if(elementresult->EnumType()!=result_enum) continue;
-		if(elementresult->Enum()    !=TriaVertexElementResultEnum) _error_("Result %s found but is not of class TriaVertexElementResultEnum");
-
-		found=true;
-		TriaVertexElementResult* result=(TriaVertexElementResult*)elementresult;
-		result->GetVectorFromResults(vector,&doflist1[0]);
-	}
+		elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES);
+		return;
+	}
+
+	_error_("Result %s not found in element",EnumToStringx(result_enum));
 }
 /*}}}*/
@@ -1953,5 +1952,5 @@
 	int     i;
 	int     numberofresults = 0;
-	int     *resultsenums =NULL;
+	int     *resultsenums   = NULL;
 
 	/*Checks*/
@@ -1964,11 +1963,14 @@
 	}
 
-	/*Allocate output*/
-	resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
-
-	/*populate enums*/
-	for(i=0;i<this->results->Size();i++){
-		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
-		resultsenums[i]=elementresult->EnumType();
+	if(numberofresults){
+
+		/*Allocate output*/
+		resultsenums=(int*)xmalloc(numberofresults*sizeof(int));
+
+		/*populate enums*/
+		for(i=0;i<this->results->Size();i++){
+			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+			resultsenums[i]=elementresult->EnumType();
+		}
 	}
 
