Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 27376)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 27377)
@@ -1445,18 +1445,13 @@
 
 	/*Now send and receive vector for vertices on partition edge*/
-	IssmDouble       **send_buffers  = xNew<IssmDouble*>(num_procs);
+	IssmDouble **send_buffers = xNewZeroInit<IssmDouble*>(num_procs);
+	IssmDouble  *recv_buffer  = xNewZeroInit<IssmDouble>(this->vertices->Size());
 	ISSM_MPI_Request  *send_requests = xNew<ISSM_MPI_Request>(num_procs);
-	for (int rank = 0;rank<num_procs;rank++){
-		#ifdef _HAVE_AD_
-		send_buffers[rank] = xNew<IssmDouble>(this->vertices->Size(),"t"); //only one alloc, "t" is required by adolc
-		#else
-		send_buffers[rank] = xNew<IssmDouble>(this->vertices->Size());
-		#endif
-		send_requests[rank] = ISSM_MPI_REQUEST_NULL;
-	}
-	IssmDouble* recv_buffer = xNew<IssmDouble>(this->vertices->Size());
+	for (int rank = 0;rank<num_procs;rank++) send_requests[rank] = ISSM_MPI_REQUEST_NULL;
+
 	for(int rank=0;rank<num_procs;rank++){
 		if(this->vertices->common_send[rank]){
 			int  numids = this->vertices->common_send[rank];
+			send_buffers[rank] = xNew<IssmDouble>(numids,"t"); //only one alloc, "t" is required by adolc
 			for(int i=0;i<numids;i++){
 				int   master_lid = this->vertices->common_send_ids[rank][i];
@@ -1496,15 +1491,8 @@
 
 	/*Now send and receive vector for vertices on partition edge*/
-	IssmDouble       **send_buffers  = xNew<IssmDouble*>(num_procs);
+	IssmDouble **send_buffers = xNewZeroInit<IssmDouble*>(num_procs);
+	IssmDouble  *recv_buffer  = xNewZeroInit<IssmDouble>(this->vertices->Size());
 	ISSM_MPI_Request  *send_requests = xNew<ISSM_MPI_Request>(num_procs);
-	for (int rank = 0;rank<num_procs;rank++){
-		#ifdef _HAVE_AD_
-		send_buffers[rank] = xNew<IssmDouble>(this->vertices->Size(),"t"); //only one alloc, "t" is required by adolc
-		#else
-		send_buffers[rank] = xNew<IssmDouble>(this->vertices->Size());
-		#endif
-		send_requests[rank] = ISSM_MPI_REQUEST_NULL;
-	}
-	IssmDouble* recv_buffer = xNew<IssmDouble>(this->vertices->Size());
+	for (int rank = 0;rank<num_procs;rank++) send_requests[rank] = ISSM_MPI_REQUEST_NULL;
 
 	/*1st: add slaves to master values (reverse of what we usually do)*/
@@ -1512,4 +1500,5 @@
 		if(this->vertices->common_recv[rank]){
 			int  numids = this->vertices->common_recv[rank];
+         send_buffers[rank] = xNew<IssmDouble>(numids,"t"); //only one alloc, "t" is required by adolc
 			for(int i=0;i<numids;i++){
 				int   master_lid = this->vertices->common_recv_ids[rank][i];
@@ -1595,19 +1584,13 @@
 
 	/*Now send and receive vector for nodes on partition edge*/
-	IssmDouble       **send_buffers  = xNew<IssmDouble*>(num_procs);
+	IssmDouble **send_buffers = xNewZeroInit<IssmDouble*>(num_procs);
+	IssmDouble  *recv_buffer  = xNewZeroInit<IssmDouble>(this->nodes->Size());
 	ISSM_MPI_Request  *send_requests = xNew<ISSM_MPI_Request>(num_procs);
-	for (int rank = 0;rank<num_procs;rank++){
-		#ifdef _HAVE_AD_
-		send_buffers[rank] = xNew<IssmDouble>(this->nodes->Size(),"t"); //only one alloc, "t" is required by adolc
-		#else
-		send_buffers[rank] = xNew<IssmDouble>(this->nodes->Size());
-		#endif
-		send_requests[rank] = ISSM_MPI_REQUEST_NULL;
-	}
-	IssmDouble* recv_buffer = xNew<IssmDouble>(this->nodes->Size());
+	for (int rank = 0;rank<num_procs;rank++) send_requests[rank] = ISSM_MPI_REQUEST_NULL;
 
 	for(int rank=0;rank<num_procs;rank++){
 		if(this->nodes->common_send[rank]){
 			int  numids = this->nodes->common_send[rank];
+			send_buffers[rank] = xNew<IssmDouble>(numids,"t"); //only one alloc, "t" is required by adolc
 			for(int i=0;i<numids;i++){
 				int   master_lid = this->nodes->common_send_ids[rank][i];
Index: /issm/trunk-jpl/src/c/shared/MemOps/MemOps.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/MemOps/MemOps.h	(revision 27376)
+++ /issm/trunk-jpl/src/c/shared/MemOps/MemOps.h	(revision 27377)
@@ -20,9 +20,5 @@
 
 /* AD (mostly ADOLC) is sensitive to calls to ensurecontiguous. These changes limit its use.*/
-#ifdef _HAVE_AD_
 template <class T> T* xNew(unsigned int size, const char* const contig = &DEFCONTIG){
-#else
-template <class T> T* xNew(unsigned int size){
-#endif
 #ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
   T* aT_p=new T[size];
@@ -58,9 +54,5 @@
 }/*}}}*/
 // AD (mostly ADOLC) is sensitive to calls to ensurecontiguous. These changes limit its use.
-#ifdef _HAVE_AD_
 template <class T> T* xNewZeroInit(unsigned int size,const char* const contig = &DEFCONTIG){
-#else
-template <class T> T* xNewZeroInit(unsigned int size){
-#endif
 #ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
 #ifdef _HAVE_AD_
