Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 13938)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 13939)
@@ -299,6 +299,4 @@
 					./modules/StringToEnumx/StringToEnumx.cpp\
 					./modules/StringToEnumx/StringToEnumx.h\
-					./modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp\
-					./modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h\
 					./modules/ConstraintsStatex/ConstraintsStatex.cpp\
 					./modules/ConstraintsStatex/ConstraintsStatex.h\
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13938)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13939)
@@ -353,5 +353,5 @@
 	Vector<IssmDouble> *df   = NULL;
 
-	bool oldalloc=false;
+	bool oldalloc=true;
 
 	/*retrieve parameters: */
@@ -538,7 +538,7 @@
 
 	/*sum over all cpus*/
-	#ifdef _HAVE_MPI_
+#ifdef _HAVE_MPI_
 	MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,MPI_INT,MPI_SUM,IssmComm::GetComm());
-	#endif
+#endif
 	xDelete<int>(connectivity_clone);
 
@@ -572,4 +572,42 @@
 	*pd_nnz=d_nnz;
 	*po_nnz=o_nnz;
+
+}/*}}}*/
+void FemModel::CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,IssmDouble kmax){/*{{{*/
+
+	int      i,connectivity;
+	int      numberofdofspernode;
+	int      fsize,configuration_type;
+	Element *element = NULL;
+	Load    *load    = NULL;
+	Matrix<IssmDouble>* Jff = NULL;
+
+	/*Checks*/
+	_assert_(nodes && elements);
+
+	/*Recover some parameters*/
+	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+	parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+	fsize=nodes->NumberOfDofs(configuration_type,FsetEnum);
+	numberofdofspernode=nodes->MaxNumDofs(configuration_type,GsetEnum);
+
+	/*Initialize Jacobian Matrix*/
+	this->AllocateSystemMatrices(&Jff,NULL,NULL,NULL);
+	Jff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+
+	/*Create and assemble matrix*/
+	for(i=0;i<elements->Size();i++){
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+		element->CreateJacobianMatrix(Jff);
+	}
+	for (i=0;i<loads->Size();i++){
+		load=(Load*)loads->GetObjectByOffset(i);
+		if(load->InAnalysis(configuration_type)) load->CreateJacobianMatrix(Jff);
+		if(load->InAnalysis(configuration_type)) load->PenaltyCreateJacobianMatrix(Jff,kmax);
+	}
+	Jff->Assemble();
+
+	/*Assign output pointer*/
+	*pJff=Jff;
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 13938)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 13939)
@@ -53,4 +53,5 @@
 		/*Methods:*/
 		void AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf);
+		void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,IssmDouble kmax);
 		void Echo();
 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
Index: /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13938)
+++ /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13939)
@@ -20,4 +20,5 @@
 	int         global_m,global_n;
 	bool        fromlocalsize = true;
+	bool        oldalloc  = true;
 
 	if(VerboseModule()) _pprintLine_("   Dirichlet lifting applied to load vector");
@@ -31,5 +32,9 @@
 		/*pf = pf - Kfs * y_s;*/
 		Kfs->GetLocalSize(&Kfsm,&Kfsn);
-		Kfsy_s=new Vector<IssmDouble>(Kfsm,fromlocalsize);
+		if(oldalloc)
+		 Kfsy_s=new Vector<IssmDouble>(Kfsm,fromlocalsize);
+		else
+		 Kfsy_s=new Vector<IssmDouble>(Kfsm,global_m);
+
 		if (flag_ys0){
 
Index: /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13938)
+++ /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13939)
@@ -15,5 +15,5 @@
 	int         fsize;
 	IssmDouble *ug_serial = NULL;
-	bool        oldalloc  = false;
+	bool        oldalloc  = true;
 
 	/*first figure out fsize: */
Index: /issm/trunk-jpl/src/c/modules/modules.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/modules.h	(revision 13938)
+++ /issm/trunk-jpl/src/c/modules/modules.h	(revision 13939)
@@ -91,5 +91,4 @@
 #include "./SpcNodesx/SpcNodesx.h"
 #include "./SurfaceAreax/SurfaceAreax.h"
-#include "./CreateJacobianMatrixx/CreateJacobianMatrixx.h"
 #include "./TriaSearchx/TriaSearchx.h"
 #include "./TriMeshx/TriMeshx.h"
