Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 14896)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 14897)
@@ -60,6 +60,4 @@
 					./classes/objects/Vertex.cpp\
 					./classes/objects/AdolcEdf.h\
-					./classes/IssmComm.h\
-					./classes/IssmComm.cpp\
 					./classes/ToolkitOptions.h\
 					./classes/ToolkitOptions.cpp\
@@ -240,4 +238,8 @@
 					./io/Disk/WriteLockFile.cpp\
 					./io/PrintfFunction.cpp\
+					./io/Comm/Comm.h\
+					./io/Comm/CommDef.h\
+					./io/Comm/IssmComm.h\
+					./io/Comm/IssmComm.cpp\
 					./EnumDefinitions/EnumDefinitions.h\
 					./modules/ModelProcessorx/ModelProcessorx.h\
Index: sm/trunk-jpl/src/c/classes/IssmComm.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IssmComm.cpp	(revision 14896)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*! \file IssmComm.cpp
- * \brief  file containing the methods for IssmComm.h
- */
-
-#ifdef HAVE_CONFIG_H
-	#include <config.h>
-#else
-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
-#endif
-
-#include "./IssmComm.h"
-#include "../include/types.h"
-#include "../include/macros.h"
-#include "../shared/Exceptions/exceptions.h"
-
-void IssmComm::SetComm(COMM incomm){ /*{{{*/
-
-	/*A comm is provided, we are running in parallel (this is not a module)*/
-	parallel = true;
-	comm     = incomm;
-
-}/*}}}*/
-void IssmComm::SetComm(void){ /*{{{*/
-
-	/*no comm provided, This is a matlab/python module*/
-	parallel = false;
-
-	/*No need to initialise comm*/
-
-}/*}}}*/
-COMM IssmComm::GetComm(){  /*{{{*/
-	if(!parallel) _error_("Cannot return comm in serial mode");
-	return comm;
-}/*}}}*/
-int IssmComm::GetRank(){  /*{{{*/
-
-	int my_rank = 0;
-
-	/*for matlab and python modules*/
-	if(!parallel) return my_rank;
-
-	#ifdef _HAVE_MPI_
-	MPI_Comm_rank(comm,&my_rank);
-	#endif
-
-	return my_rank;
-
-}/*}}}*/
-int IssmComm::GetSize(){  /*{{{*/
-
-	int size = 1;
-
-	/*for matlab and python modules*/
-	if(!parallel) return size;
-
-	#ifdef _HAVE_MPI_
-	MPI_Comm_size(comm,&size);
-	#endif
-
-	return size;
-
-}/*}}}*/
Index: sm/trunk-jpl/src/c/classes/IssmComm.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/IssmComm.h	(revision 14896)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/* \file IssmComm.h
- * \brief  create a class with a static comm, and static methods to access it
- * This is a way of protecting access to the communicator.
- */
-
-#ifndef _ISSM_COMM_H
-#define _ISSM_COMM_H
-
-/*{{{*/
-#ifdef HAVE_CONFIG_H
-	#include <config.h>
-#else
-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
-#endif
-
-#include "../include/types.h"
-/*}}}*/
-
-class IssmComm {
-
-	private:
-		static COMM comm;
-		static bool parallel;
-
-	public:
-		static void SetComm(COMM incomm);
-		static void SetComm(void);
-		static COMM GetComm(void);
-		static int GetRank(void);
-		static int GetSize(void);
-};
-
-#endif  /* _ISSM_COMM_H */
Index: /issm/trunk-jpl/src/c/classes/ToolkitOptions.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ToolkitOptions.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/classes/ToolkitOptions.h	(revision 14897)
@@ -15,5 +15,4 @@
 #endif
 
-#include "../include/types.h"
 /*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/classes.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/classes.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/classes/classes.h	(revision 14897)
@@ -35,5 +35,4 @@
 #include "./OptPars.h"
 #include "./AdolcEdf.h"
-#include "./IssmComm.h"
 #include "./ToolkitOptions.h"
 #include "./RiftStruct.h"
Index: /issm/trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 14897)
@@ -18,7 +18,6 @@
 #include "../../../shared/Exceptions/exceptions.h"
 #include "../../../shared/Numerics/recast.h"
-#include "../../../io/io.h"
 #include "../../../EnumDefinitions/EnumDefinitions.h"
-#include "../../../classes/IssmComm.h"
+#include "../../../io/Comm/Comm.h"
 #include "./ExternalResult.h"
 /*}}}*/
Index: /issm/trunk-jpl/src/c/include/globals.h
===================================================================
--- /issm/trunk-jpl/src/c/include/globals.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/include/globals.h	(revision 14897)
@@ -7,5 +7,5 @@
 
 #include "./types.h"
-#include "../classes/IssmComm.h"
+#include "../io/Comm/Comm.h"
 #include "../classes/ToolkitOptions.h"
 
Index: /issm/trunk-jpl/src/c/include/types.h
===================================================================
--- /issm/trunk-jpl/src/c/include/types.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/include/types.h	(revision 14897)
@@ -13,7 +13,4 @@
 
 #include <stdio.h>
-
-/*Define abstract type for I/O: */
-enum param_type { STRING, INTEGER, STRINGARRAY, DOUBLE, DOUBLEVEC, DOUBLEMAT, PETSCVEC, PETSCMAT };
 
 /*here are our abstracted types: inspired on petsc */
@@ -39,11 +36,4 @@
 #endif
 
-/*Define communicator: */
-#ifdef _HAVE_MPI_
-#include <mpi.h>
-typedef MPI_Comm COMM;
-#else
-typedef int COMM;
-#endif
 
 #endif //ifndef _TYPES_H_
Index: /issm/trunk-jpl/src/c/io/Comm/Comm.h
===================================================================
--- /issm/trunk-jpl/src/c/io/Comm/Comm.h	(revision 14897)
+++ /issm/trunk-jpl/src/c/io/Comm/Comm.h	(revision 14897)
@@ -0,0 +1,11 @@
+/*\file Comm.h
+ *\brief: communicator information
+ */
+
+#ifndef _IO_COMM_H_
+#define _IO_COMM_H_
+
+#include "./CommDef.h"
+#include "./IssmComm.h"
+
+#endif
Index: /issm/trunk-jpl/src/c/io/Comm/CommDef.h
===================================================================
--- /issm/trunk-jpl/src/c/io/Comm/CommDef.h	(revision 14897)
+++ /issm/trunk-jpl/src/c/io/Comm/CommDef.h	(revision 14897)
@@ -0,0 +1,16 @@
+/*\file CommDef.h
+ *\brief: defined communicator typedefs
+ */
+
+#ifndef _IO_COMMDEF_H_
+#define _IO_COMMDEF_H_
+
+/*Define communicator: */
+#ifdef _HAVE_MPI_
+	#include <mpi.h>
+	typedef MPI_Comm COMM;
+#else
+	typedef int COMM;
+#endif
+
+#endif
Index: /issm/trunk-jpl/src/c/io/Comm/IssmComm.cpp
===================================================================
--- /issm/trunk-jpl/src/c/io/Comm/IssmComm.cpp	(revision 14897)
+++ /issm/trunk-jpl/src/c/io/Comm/IssmComm.cpp	(revision 14897)
@@ -0,0 +1,62 @@
+/*! \file IssmComm.cpp
+ * \brief  file containing the methods for IssmComm.h
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./IssmComm.h"
+#include "../../include/types.h"
+#include "../../include/macros.h"
+#include "../../shared/Exceptions/exceptions.h"
+
+void IssmComm::SetComm(COMM incomm){ /*{{{*/
+
+	/*A comm is provided, we are running in parallel (this is not a module)*/
+	parallel = true;
+	comm     = incomm;
+
+}/*}}}*/
+void IssmComm::SetComm(void){ /*{{{*/
+
+	/*no comm provided, This is a matlab/python module*/
+	parallel = false;
+
+	/*No need to initialise comm*/
+
+}/*}}}*/
+COMM IssmComm::GetComm(){  /*{{{*/
+	if(!parallel) _error_("Cannot return comm in serial mode");
+	return comm;
+}/*}}}*/
+int IssmComm::GetRank(){  /*{{{*/
+
+	int my_rank = 0;
+
+	/*for matlab and python modules*/
+	if(!parallel) return my_rank;
+
+	#ifdef _HAVE_MPI_
+	MPI_Comm_rank(comm,&my_rank);
+	#endif
+
+	return my_rank;
+
+}/*}}}*/
+int IssmComm::GetSize(){  /*{{{*/
+
+	int size = 1;
+
+	/*for matlab and python modules*/
+	if(!parallel) return size;
+
+	#ifdef _HAVE_MPI_
+	MPI_Comm_size(comm,&size);
+	#endif
+
+	return size;
+
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/io/Comm/IssmComm.h
===================================================================
--- /issm/trunk-jpl/src/c/io/Comm/IssmComm.h	(revision 14897)
+++ /issm/trunk-jpl/src/c/io/Comm/IssmComm.h	(revision 14897)
@@ -0,0 +1,34 @@
+/* \file IssmComm.h
+ * \brief  create a class with a static comm, and static methods to access it
+ * This is a way of protecting access to the communicator.
+ */
+
+#ifndef _ISSM_COMM_H
+#define _ISSM_COMM_H
+
+/*{{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./CommDef.h"
+
+/*}}}*/
+
+class IssmComm {
+
+	private:
+		static COMM comm;
+		static bool parallel;
+
+	public:
+		static void SetComm(COMM incomm);
+		static void SetComm(void);
+		static COMM GetComm(void);
+		static int GetRank(void);
+		static int GetSize(void);
+};
+
+#endif  /* _ISSM_COMM_H */
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMat.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMat.h	(revision 14897)
@@ -19,5 +19,5 @@
 #include "../../include/macros.h"
 #include "../../classes/ToolkitOptions.h"
-#include "../../classes/IssmComm.h"
+#include "../../io/Comm/Comm.h"
 #include "../../EnumDefinitions/EnumDefinitions.h"
 #include "./IssmToolkitUtils.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 14897)
@@ -23,5 +23,5 @@
 #include "../../include/macros.h"
 #include "../../Container/DataSet.h"
-#include "../../classes/IssmComm.h"
+#include "../../io/Comm/Comm.h"
 #include "../../classes/objects/Bucket.h"
 #include "../mumps/mumpsincludes.h"
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 14896)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 14897)
@@ -13,5 +13,5 @@
 #include "../../shared/MemOps/xMemCpy.h"
 #include "../../shared/Alloc/alloc.h"
-#include "../../classes/IssmComm.h"
+#include "../../io/Comm/Comm.h"
 #include "../../include/macros.h"
 #include "../../classes/ToolkitOptions.h"
Index: /issm/trunk-jpl/src/c/toolkits/mpi/mpiincludes.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/mpi/mpiincludes.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/toolkits/mpi/mpiincludes.h	(revision 14897)
@@ -12,3 +12,4 @@
 #include "./patches/mpipatches.h"
 
+
 #endif
Index: /issm/trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp	(revision 14896)
+++ /issm/trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp	(revision 14897)
@@ -12,5 +12,5 @@
 #include <stdio.h>
 #include "../../../shared/Alloc/alloc.h"
-#include "../../../classes/IssmComm.h"
+#include "../../../io/Comm/Comm.h"
 
 void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
Index: /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 14896)
+++ /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 14897)
@@ -15,5 +15,5 @@
 #include "../../shared/Alloc/alloc.h"
 #include "../../shared/Exceptions/exceptions.h"
-#include "../../classes/IssmComm.h"
+#include "../../io/Comm/Comm.h"
 #include "../mpi/patches/mpipatches.h"
 
Index: /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 14896)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 14897)
@@ -13,5 +13,5 @@
 #include "../../../shared/Alloc/alloc.h"
 #include "../../../shared/Exceptions/exceptions.h"
-#include "../../../classes/IssmComm.h"
+#include "../../../io/Comm/Comm.h"
 #include "../../../EnumDefinitions/EnumDefinitions.h"
 
Index: /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 14896)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 14897)
@@ -13,5 +13,5 @@
 #include "./SolverEnum.h"
 #include "../../toolkitsenums.h"
-#include "../../../include/types.h"
+#include "../../../io/Comm/Comm.h"
 
 class Parameters;
