Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 16588)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 16589)
@@ -60,5 +60,5 @@
 		virtual void   ComputeStrainRate(Vector<IssmDouble>* eps)=0;
 		virtual void   ResultInterpolation(int* pinterpolation,int output_enum)=0;
-		virtual void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum)=0;
+		virtual void   ResultToVector(Vector<IssmDouble>* vector,int output_enum)=0;
 		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
 		virtual void   InputDuplicate(int original_enum,int new_enum)=0;
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16588)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16589)
@@ -2864,5 +2864,5 @@
 /*}}}*/
 /*FUNCTION Penta::ResultToVector{{{*/
-void Penta::ResultToVector(Vector<IssmPDouble>* vector,int output_enum){
+void Penta::ResultToVector(Vector<IssmDouble>* vector,int output_enum){
 
 	Input* input=this->inputs->GetInput(output_enum);
@@ -2875,5 +2875,4 @@
 		case P1Enum:{
 			IssmDouble  values[NUMVERTICES];
-			IssmPDouble pvalues[NUMVERTICES]; 
 			int         connectivity[NUMVERTICES];
 			int         sidlist[NUMVERTICES];
@@ -2882,7 +2881,7 @@
 			this->GetConnectivityList(&connectivity[0]);
 			this->GetInputListOnVertices(&values[0],output_enum);
-			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i])/reCast<IssmPDouble>(connectivity[i]);
-
-			vector->SetValues(NUMVERTICES,&sidlist[0],&pvalues[0],ADD_VAL);
+			for(int i=0;i<NUMVERTICES;i++) values[i] = values[i]/reCast<IssmDouble>(connectivity[i]);
+
+			vector->SetValues(NUMVERTICES,&sidlist[0],&values[0],ADD_VAL);
 			break;
 					}
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16588)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16589)
@@ -96,5 +96,5 @@
 
 		void   ResultInterpolation(int* pinterpolation,int output_enum);
-		void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+		void   ResultToVector(Vector<IssmDouble>* vector,int output_enum);
 		void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
 		void   ResetCoordinateSystem(void);
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16588)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16589)
@@ -112,5 +112,5 @@
 		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm){_error_("not implemented yet");};
 		void        ResultInterpolation(int* pinterpolation,int output_enum){_error_("not implemented");};
-		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum){_error_("not implemented");};
+		void        ResultToVector(Vector<IssmDouble>* vector,int output_enum){_error_("not implemented");};
 		void        ResetCoordinateSystem(void){_error_("not implemented yet");};
 		void	      SmbGradients(){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16588)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16589)
@@ -2464,5 +2464,5 @@
 /*}}}*/
 /*FUNCTION Tria::ResultToVector{{{*/
-void Tria::ResultToVector(Vector<IssmPDouble>* vector,int output_enum){
+void Tria::ResultToVector(Vector<IssmDouble>* vector,int output_enum){
 
 	Input* input=this->inputs->GetInput(output_enum);
@@ -2475,5 +2475,4 @@
 		case P1Enum:{
 			IssmDouble  values[NUMVERTICES];
-			IssmPDouble pvalues[NUMVERTICES]; 
 			int         connectivity[NUMVERTICES];
 			int         sidlist[NUMVERTICES];
@@ -2482,7 +2481,7 @@
 			this->GetConnectivityList(&connectivity[0]);
 			this->GetInputListOnVertices(&values[0],output_enum);
-			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i])/reCast<IssmPDouble>(connectivity[i]);
-
-			vector->SetValues(NUMVERTICES,&sidlist[0],&pvalues[0],ADD_VAL);
+			for(int i=0;i<NUMVERTICES;i++) values[i] = values[i]/reCast<IssmDouble>(connectivity[i]);
+
+			vector->SetValues(NUMVERTICES,&sidlist[0],&values[0],ADD_VAL);
 			break;
 					}
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16588)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16589)
@@ -103,5 +103,5 @@
 		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
 		void        ResultInterpolation(int* pinterpolation,int output_enum);
-		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+		void        ResultToVector(Vector<IssmDouble>* vector,int output_enum);
 		void        ResetCoordinateSystem(void);
 		void	      SmbGradients();
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16588)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16589)
@@ -383,4 +383,5 @@
 	return new GenericExternalResult<Vector<IssmPDouble>*>(this->id,StringToEnumx(this->result_name),this->value,this->step,this->time);
 } /*}}}*/
+#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)  //We hook off this specific specialization when not running ADOLC, otherwise we get a redeclaration with the next specialization. 
 template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
 
@@ -420,4 +421,5 @@
 }
 /*}}}*/
+#endif
 template <> inline int GenericExternalResult<Vector<IssmPDouble>*>::ObjectEnum(void){ /*{{{*/
 	return NoneEnum;
@@ -425,3 +427,49 @@
 } /*}}}*/
 
+/*Specifics instantiations for Vector<IssmDouble>*/
+template <> inline void GenericExternalResult<Vector<IssmDouble>*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+
+	int i;
+	char *name   = NULL;
+	int   length,rows,cols=1;
+	IssmDouble*  serialvalues = NULL;
+	IssmPDouble* pserialvalues = NULL;
+
+	if(!io_gather){
+		_error_("not supported yet");
+	}
+
+	/*Serialize vector*/
+	serialvalues = this->value->ToMPISerial();
+	this->value->GetSize(&rows);
+	
+	pserialvalues=xNew<IssmPDouble>(rows);
+	for(i=0;i<rows;i++)pserialvalues[i]=reCast<IssmPDouble>(serialvalues[i]);
+
+	if(IssmComm::GetRank()==0){
+		/*First write name: */
+		length=(strlen(this->result_name)+1)*sizeof(char);
+		fwrite(&length,sizeof(int),1,fid);
+		fwrite(this->result_name,length,1,fid);
+
+		/*Now write time and step: */
+		IssmPDouble passiveDouble=reCast<IssmPDouble>(time);
+		fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
+		fwrite(&step,sizeof(int),1,fid);
+
+		/*writing a IssmDouble array, type is 3:*/
+		int type=3;
+		fwrite(&type,sizeof(int),1,fid);
+		fwrite(&rows,sizeof(int),1,fid);
+		fwrite(&cols,sizeof(int),1,fid);
+		fwrite(pserialvalues,cols*rows*sizeof(IssmPDouble),1,fid);
+	}
+
+	/*Clean up*/
+	xDelete<IssmPDouble>(pserialvalues);
+	xDelete<IssmDouble>(serialvalues);
+
+}
+/*}}}*/
+
 #endif  /* _EXTERNAL_RESULTOBJECT_H */
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 16588)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 16589)
@@ -562,5 +562,5 @@
 
 					}
-					Vector<IssmPDouble> *vector_result = new Vector<IssmPDouble>(this->vertices->NumberOfVertices());
+					Vector<IssmDouble> *vector_result = new Vector<IssmDouble>(this->vertices->NumberOfVertices());
 
 					/*Fill in vector*/
@@ -571,5 +571,5 @@
 					vector_result->Assemble();
 
-					results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
+					results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
 					isvec = true;
 					break;
