diff --git a/Makefile b/Makefile
index 0f1d2941db42d9efeb11bde65bd9dd2ffcbb9118..41faad1dee945ca30eb82d285228a7014eab4fb3 100644
--- a/Makefile
+++ b/Makefile
@@ -57,6 +57,8 @@ test:
 	$(MAKE) $(TESTD)/test2
 	$(MAKE) $(TESTD)/test3
 	$(MAKE) $(TESTD)/test4
+	$(MAKE) $(TESTD)/test_pragma1
+	$(MAKE) $(TESTD)/test_pragma2
 
 .PHONY: dots
 dots:
diff --git a/include/mpi_collective.hpp b/include/mpi_collective.hpp
index 9d8c9eee2f4d8087afe9f6b6077bd49fdc94fc71..2f4392f8f038e9023237426dda7658065d4f0596 100644
--- a/include/mpi_collective.hpp
+++ b/include/mpi_collective.hpp
@@ -1,3 +1,6 @@
+#ifndef __MPI_COLLECTIVE_HPP_
+#define __MPI_COLLECTIVE_HPP_
+
 // dependance de tree-pass.H
 #include <gcc-plugin.h>
 // declare opt_pass
@@ -136,3 +139,12 @@ public:
 
 };
 
+//
+// mpi collective pragma
+//
+
+void register_mpicoll_check_pragma(void *event_data, void *data);
+void mpicoll_check_pragma(cpp_reader *);
+void verify_mpicoll_list(void *event_data, void *data);
+
+#endif
diff --git a/src/mpi_collective_pragma.cpp b/src/mpi_collective_pragma.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..be5dde3ebf6dc2cd691a17cac7230c05d9abe487
--- /dev/null
+++ b/src/mpi_collective_pragma.cpp
@@ -0,0 +1,46 @@
+#include <cstdio>
+
+// dependance de c-pragma.h
+#include <gcc-plugin.h>
+// c_register_pragma
+#include <c-family/c-pragma.h>
+// IDENTIFIER_POINTER
+#include <tree.h>
+
+#include "mpi_collective.hpp"
+
+void register_mpicoll_check_pragma(void *event_data, void *data)
+{
+	(void) event_data;
+	(void) data;
+	printf("registering pragma: \"ProjectCA\"\n");
+	c_register_pragma("ProjetCA", "mpicoll_check", mpicoll_check_pragma);
+}
+
+void mpicoll_check_pragma(cpp_reader *)
+{
+	location_t loc;
+	cpp_ttype token;
+	tree x;
+
+	// on a pas acces a la fonction courante sans passer par cfun
+	if (cfun)
+	{
+		printf("#pragma ProjectCA mpicoll_check is not allowed inside functions");
+		return;
+	}
+
+	token = pragma_lex(&x, &loc);
+	if (token == CPP_NAME)
+	{
+		printf("adding %s to function to parse.\n", IDENTIFIER_POINTER(x));
+	}
+
+}
+
+void verify_mpicoll_list(void *event_data, void *data)
+{
+	(void) event_data;
+	(void) data;
+	printf("In verify mpicoll list\n");
+}
diff --git a/src/plugin.cpp b/src/plugin.cpp
index 3ee2fbb41aaa94503e5e62e12ea50ec9203949c4..51c5b7954de89e5ff5d50a76fc01746c8db1c91a 100644
--- a/src/plugin.cpp
+++ b/src/plugin.cpp
@@ -60,5 +60,15 @@ plugin_init(struct plugin_name_args *plugin_info,
 	                  NULL,
 	                  &pass_info);
 
+	register_callback(plugin_info->base_name,
+	                  PLUGIN_PRAGMAS,
+	                  register_mpicoll_check_pragma,
+	                  NULL);
+
+	register_callback(plugin_info->base_name,
+	                  PLUGIN_FINISH_UNIT,
+	                  verify_mpicoll_list,
+	                  NULL);
+
 	return 0;
 }
diff --git a/src/test/test_pragma1.c b/src/test/test_pragma1.c
new file mode 100644
index 0000000000000000000000000000000000000000..49e26b8f7d886444c967a060fbe21baae07d06b3
--- /dev/null
+++ b/src/test/test_pragma1.c
@@ -0,0 +1,7 @@
+
+int main(){
+
+	#pragma ProjetCA mpicoll_check main
+
+	return 0;
+}
diff --git a/src/test/test_pragma2.c b/src/test/test_pragma2.c
new file mode 100644
index 0000000000000000000000000000000000000000..083e1e5d04a2fa1ca8b404ad17df8185efd7437e
--- /dev/null
+++ b/src/test/test_pragma2.c
@@ -0,0 +1,6 @@
+
+
+#pragma ProjetCA mpicoll_check main
+int main(){
+	return 0;
+}