diff --git a/conf/profile_mesonh.ihm b/conf/profile_mesonh.ihm
index a629a97262a88312aacb0839ad1f881962120108..70074e378ca56ab7397af8b0e97937a476fbac72 100755
--- a/conf/profile_mesonh.ihm
+++ b/conf/profile_mesonh.ihm
@@ -85,6 +85,10 @@ export MNH_INT=${MNH_INT}
 #
 export MNH_REAL=${MNH_REAL}
 #
+#  FOREFIRE
+#
+export MNH_FOREFIRE=${MNH_FOREFIRE}
+#
 ##########################################################
 ##########################################################
 ##########################################################
diff --git a/src/LIB/FOREFIRE/C_ForeFire_Interface.c b/src/LIB/FOREFIRE/C_ForeFire_Interface.c
new file mode 100644
index 0000000000000000000000000000000000000000..97ca72b6e363593be900074d22e92ef230305c4e
--- /dev/null
+++ b/src/LIB/FOREFIRE/C_ForeFire_Interface.c
@@ -0,0 +1,429 @@
+/*
+*MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+*MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+*MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+*MNH_LIC for details. version 1.
+*/
+/*
+!     ######################################################################
+!
+!!****  *C_ForeFire_Interface* - C bindings for LibForeFire
+!!****                        
+!!
+!!    PURPOSE
+!!    -------
+!!     Purpose is to provide entry points to the ForeFire library in order
+!!    to perform wildfire simulations
+!
+!
+!!**  METHOD
+!!    ------
+!!     All function calls are made from dynamic library, the shared lib is loaded at init
+!!     It matches F_ForeFire_Interface.f90 
+!!
+!!    EXTERNAL
+!!    --------
+!!      NA
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      NA
+!!
+!!    REFERENCE
+!!    ---------
+!!    
+!!
+!!    AUTHOR
+!!    ------
+!!    J. P. Lafore  *Meteo-France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    (SPE- Corte, Filippi) 04/2010 
+!! 
+!------------------------------------------------------------------------------
+!
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <assert.h>
+
+#define MAXCHARFORFUNC 200
+
+void *my_lib_handle = NULL;
+char passingchar[MAXCHARFORFUNC];
+
+const char* castchar(const char* cname){
+	int len = strlen(cname);
+	unsigned i = 0;
+	assert(len<MAXCHARFORFUNC);
+	for (i=0;i < len;i++){
+		passingchar[i]=cname[i];
+	}
+	passingchar[len]='\0';
+	return passingchar;
+}
+
+void loadLib(){
+	char libff[100];
+	sprintf(libff,"%s/exe/libForeFire.so",getenv("SRC_MESONH"));
+	my_lib_handle = dlopen(libff, RTLD_LAZY);
+}
+
+void MNHInit(double* t) {
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(double);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"MNHInit");
+		if (void_func!=NULL) {
+			void_func(*t);
+		} else {
+			printf("function 'MNHInit' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+
+}
+
+void MNHCreateDomain(int* id
+		, int* year, int* month, int* day, double* t
+		, double* lat, double* lon
+		, int* mdimx, double* meshx
+		, int* mdimy, double* meshy
+		, int* mdimz, int* sizein, double* zgrid
+		, double* dt) {
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(int, int, int, int, double, double, double
+			, int, double*, int, double*, int, double*, double);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"MNHCreateDomain");
+		if (void_func!=NULL) {
+			void_func(*id, *year, *month, *day, *t, *lat, *lon
+					, *mdimx, meshx, *mdimy, meshy, *mdimz, zgrid, *dt);
+		} else {
+			printf("function 'MNHInit' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+
+}
+
+void CheckLayer(const char* layerName) {
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"CheckLayer");
+		if (void_func!=NULL) {
+			void_func(layerName);
+		} else {
+			printf("function 'checkLayer' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+
+}
+
+void MNHStep(double* dt) {
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(double);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"MNHStep");
+		if (void_func!=NULL) {
+			void_func(*dt);
+		} else {
+			printf("function 'MNHStep' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+
+}
+
+void MNHGoTo(double* time) {
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(double);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"MNHGoTo");
+		if (void_func!=NULL) {
+			void_func(*time);
+		} else {
+			printf("function 'MNHGoTo' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+
+}
+
+void Execute(const char* command) {
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"executeMNHCommand");
+		if (void_func!=NULL) {
+			void_func(command);
+		} else {
+			printf("function 'executeMNHCommand' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+
+}
+
+void FFPutString(const char* name, char* n){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, char*);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFPutString");
+		if (void_func!=NULL) {
+			void_func(name, n);
+		} else {
+			printf("function 'FFPutString' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+
+void FFGetString(const char* name, const char* n){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, const char*);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFGetString");
+		if (void_func!=NULL) {
+			void_func(name, n);
+		} else {
+			printf("function 'FFGetString' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+
+void FFPutInt(const char* name, int* n){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, int*);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFPutInt");
+		if (void_func!=NULL) {
+			void_func(name, n);
+		} else {
+			printf("function 'FFPutInt' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+
+void FFGetInt(const char* name, int* n){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, int*);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFGetInt");
+		if (void_func!=NULL) {
+			void_func(name, n);
+		} else {
+			printf("function 'FFGetInt' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+
+void FFGetIntArray(const char* name, int* x,
+		int *sizein, int *sizeout){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, int*, int, int);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFGetIntArray");
+		if (void_func!=NULL) {
+			void_func(name, x, *sizein, *sizeout);
+		} else {
+			printf("function 'FFGetIntArray' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+
+void FFPutIntArray(const char* name, double *curtime
+		, int* x, int *sizein, int *sizeout){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, double, int*, int, int);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFPutIntArray");
+		if (void_func!=NULL) {
+			void_func(name, *curtime, x, *sizein, *sizeout);
+		} else {
+			printf("function 'FFPutIntArray' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+
+void FFPutDouble(const char* name, double* x){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, double*);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFPutDouble");
+		if (void_func!=NULL) {
+			void_func(name, x);
+		} else {
+			printf("function 'FFPutDouble' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+
+void FFGetDouble(const char* name, double* x){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, double*);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFGetDouble");
+		if (void_func!=NULL) {
+			void_func(name, x);
+		} else {
+			printf("function 'FFGetDouble' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+
+void FFGetDoubleArray(const char* name, double *curtime
+		, double* x, int *sizein, int *sizeout){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, double, double*, int, int);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFGetDoubleArray");
+		if (void_func!=NULL) {
+			void_func(name, *curtime, x, *sizein, *sizeout);
+		} else {
+			printf("function 'FFGetDoubleArray' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+void FFDumpDoubleArray(int *nmodel, int *nip, const char* name, double *curtime
+		, double* x, int *sizein, int *ni, int *nj, int *nk, int *sizeout){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(int, int, const char*, double, double*, int, int, int, int, int);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFDumpDoubleArray");
+		if (void_func!=NULL) {
+			void_func(*nmodel, *nip, name, *curtime, x, *sizein, *ni, *nj, *nk, *sizeout);
+		} else {
+			printf("function 'FFDumpDoubleArray' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
+void FFPutDoubleArray(const char* name, double* x,
+		int *sizein, int *sizeout){
+
+	if ( my_lib_handle == NULL ) loadLib();
+
+	void (*void_func)(const char*, double*, int, int);
+
+	if (my_lib_handle!=NULL) {
+		*(void **) (&void_func) = dlsym(my_lib_handle,"FFPutDoubleArray");
+		if (void_func!=NULL) {
+			void_func(name, x, *sizein, *sizeout);
+		} else {
+			printf("function 'FFPutDoubleArray' not found !!\n");
+			printf(dlerror());
+		}
+	} else {
+		printf("libForeFire not found !!\n");
+		printf(dlerror());
+	}
+}
diff --git a/src/LIB/FOREFIRE/F_ForeFire_Interface.f90 b/src/LIB/FOREFIRE/F_ForeFire_Interface.f90
new file mode 100644
index 0000000000000000000000000000000000000000..b9457e78139f07d2d5a26672b220a8677fd77ef7
--- /dev/null
+++ b/src/LIB/FOREFIRE/F_ForeFire_Interface.f90
@@ -0,0 +1,180 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+MODULE MODD_FOREFIRE_FORTRAN_API
+
+	USE&
+        ISO_C_BINDING, ONLY: C_INT, C_DOUBLE, C_CHAR, C_NULL_CHAR
+	USE MODD_NSV, ONLY: NSV_FF
+	IMPLICIT NONE
+	
+	CHARACTER(LEN=19, KIND=C_CHAR) 	:: sCoupling = C_CHAR_'couplingResolution'//C_NULL_CHAR
+	CHARACTER(LEN=9, KIND=C_CHAR) 	:: sParallel = C_CHAR_'parallel'//C_NULL_CHAR
+	CHARACTER(LEN=18, KIND=C_CHAR) 	:: sNumIte = C_CHAR_'numAtmoIterations'//C_NULL_CHAR
+	CHARACTER(LEN=14, KIND=C_CHAR) 	:: sOutUpdate = C_CHAR_'outputsUpdate'//C_NULL_CHAR
+	CHARACTER(LEN=15, KIND=C_CHAR) 	:: s3DFlow = C_CHAR_'3DOutputs.Flow'//C_NULL_CHAR
+	CHARACTER(LEN=15, KIND=C_CHAR) 	:: s3DPhys = C_CHAR_'3DOutputs.Phys'//C_NULL_CHAR
+	CHARACTER(LEN=15, KIND=C_CHAR)	:: s3DChem = C_CHAR_'3DOutputs.Chem'//C_NULL_CHAR
+	CHARACTER(LEN=9, KIND=C_CHAR) 	:: sAltitude = C_CHAR_'altitude'//C_NULL_CHAR
+	CHARACTER(LEN=6, KIND=C_CHAR) 	:: sZgrid = C_CHAR_'ZGRID'//C_NULL_CHAR
+	CHARACTER(LEN=9, KIND=C_CHAR) 	:: sNumFNMax = C_CHAR_'numFNMax'//C_NULL_CHAR
+	CHARACTER(LEN=14, KIND=C_CHAR) 	:: sMNHmult = C_CHAR_'mnhMultiplier'//C_NULL_CHAR
+	CHARACTER(LEN=14, KIND=C_CHAR) 	:: sPosX = C_CHAR_'FireNodesPosX'//C_NULL_CHAR
+	CHARACTER(LEN=14, KIND=C_CHAR) 	:: sPosY = C_CHAR_'FireNodesPosY'//C_NULL_CHAR
+	CHARACTER(LEN=14, KIND=C_CHAR) 	:: sVelX = C_CHAR_'FireNodesVelX'//C_NULL_CHAR
+	CHARACTER(LEN=14, KIND=C_CHAR) 	:: sVelY = C_CHAR_'FireNodesVelY'//C_NULL_CHAR
+	CHARACTER(LEN=14, KIND=C_CHAR) 	:: sTime = C_CHAR_'FireNodesTime'//C_NULL_CHAR
+	CHARACTER(LEN=14, KIND=C_CHAR) 	:: sId = C_CHAR_'FireNodesId'//C_NULL_CHAR
+	CHARACTER(LEN=6, KIND=C_CHAR) 	:: sWindU = C_CHAR_'windU'//C_NULL_CHAR
+	CHARACTER(LEN=6, KIND=C_CHAR) 	:: sWindV = C_CHAR_'windV'//C_NULL_CHAR
+	CHARACTER(LEN=11, KIND=C_CHAR) 	:: sOutWindU = C_CHAR_'outerWindU'//C_NULL_CHAR
+	CHARACTER(LEN=11, KIND=C_CHAR) 	:: sOutWindV = C_CHAR_'outerWindV'//C_NULL_CHAR
+	CHARACTER(LEN=2, KIND=C_CHAR) 	:: sU = C_CHAR_'U'//C_NULL_CHAR
+	CHARACTER(LEN=2, KIND=C_CHAR) 	:: sV = C_CHAR_'V'//C_NULL_CHAR
+	CHARACTER(LEN=2, KIND=C_CHAR) 	:: sW = C_CHAR_'W'//C_NULL_CHAR
+	CHARACTER(LEN=2, KIND=C_CHAR) 	:: sT = C_CHAR_'T'//C_NULL_CHAR
+	CHARACTER(LEN=2, KIND=C_CHAR) 	:: sP = C_CHAR_'P'//C_NULL_CHAR
+	CHARACTER(LEN=4, KIND=C_CHAR) 	:: sTKE = C_CHAR_'TKE'//C_NULL_CHAR
+	CHARACTER(LEN=6, KIND=C_CHAR) 	:: sMoist = C_CHAR_'moist'//C_NULL_CHAR
+	CHARACTER(LEN=9, KIND=C_CHAR) 	:: sHeatFlux = C_CHAR_'heatFlux'//C_NULL_CHAR
+	CHARACTER(LEN=10, KIND=C_CHAR) 	:: sVaporFlux = C_CHAR_'vaporFlux'//C_NULL_CHAR
+	CHARACTER(LEN=7, KIND=C_CHAR), DIMENSION(:), ALLOCATABLE 	:: sScalarVariables
+	CHARACTER(LEN=7, KIND=C_CHAR), DIMENSION(:), ALLOCATABLE 	:: sChemicalVariables
+ 
+	! INTERFACES FOR THE FUNCTIONS TO BE CALLED IN C !
+	!------------------------------------------------!
+	
+   INTERFACE
+
+    	SUBROUTINE MNH_TO_FF_INIT(T) BIND(C, NAME='MNHInit')
+			IMPORT C_DOUBLE
+    		REAL(C_DOUBLE), INTENT(IN) :: T
+    	END SUBROUTINE MNH_TO_FF_INIT
+
+    	SUBROUTINE MNH_TO_FF_CREATEDOMAIN(ID, YEAR, MONTH, DAY, TIME &
+    			, LAT, LON, MDIMX, MESHX, MDIMY, MESHY, MDIMZ, SIZEIN, ZGRID, DT) BIND(C, NAME='MNHCreateDomain')
+			IMPORT C_INT, C_DOUBLE
+    		INTEGER(C_INT), INTENT(IN) :: ID
+    		INTEGER(C_INT), INTENT(IN) :: YEAR, MONTH, DAY
+    		REAL(C_DOUBLE), INTENT(IN) :: TIME
+    		REAL(C_DOUBLE), INTENT(IN) :: LAT, LON
+    		INTEGER(C_INT), INTENT(IN) :: MDIMX, MDIMY, MDIMZ
+    		REAL(C_DOUBLE), DIMENSION(MDIMX), INTENT(IN) :: MESHX
+    		REAL(C_DOUBLE), DIMENSION(MDIMY), INTENT(IN) :: MESHY
+    		INTEGER(C_INT), INTENT(IN) :: SIZEIN
+    		REAL(C_DOUBLE), DIMENSION(SIZEIN), INTENT(IN) :: ZGRID
+    		REAL(C_DOUBLE), INTENT(IN) :: DT
+    	END SUBROUTINE MNH_TO_FF_CREATEDOMAIN
+
+    	SUBROUTINE MNH_TO_FF_CHECKLAYER(LAYERNAME) BIND(C, NAME='CheckLayer')
+			IMPORT C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) 	:: LAYERNAME
+    	END SUBROUTINE MNH_TO_FF_CHECKLAYER
+
+    	SUBROUTINE MNH_TO_FF_STEP(DT) BIND(C, NAME='MNHStep')
+			IMPORT C_DOUBLE
+    		REAL(C_DOUBLE), INTENT(IN) :: DT
+    	END SUBROUTINE MNH_TO_FF_STEP
+
+    	SUBROUTINE MNH_TO_FF_GOTO(T) BIND(C, NAME='MNHGoTo')
+			IMPORT C_DOUBLE
+    		REAL(C_DOUBLE), INTENT(IN) :: T
+    	END SUBROUTINE MNH_TO_FF_GOTO
+
+    	SUBROUTINE MNH_TO_FF_EXECUTECOMMAND(COMMAND) BIND(C, NAME='Execute')
+			IMPORT C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: COMMAND
+    	END SUBROUTINE MNH_TO_FF_EXECUTECOMMAND
+
+    	SUBROUTINE MNH_PUT_STRING(WORD) BIND(C, NAME='FFGetString')
+     		IMPORT C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: WORD
+    	END SUBROUTINE MNH_PUT_STRING
+
+    	SUBROUTINE MNH_GET_STRING(WORD) BIND(C, NAME='FFPutString')
+    		IMPORT C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: WORD
+    	END SUBROUTINE MNH_GET_STRING
+
+    	SUBROUTINE MNH_PUT_INT(MNAME, M) BIND(C, NAME='FFGetInt')
+    		IMPORT C_INT, C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		INTEGER(C_INT), INTENT(IN) :: M
+    	END SUBROUTINE MNH_PUT_INT
+
+    	SUBROUTINE MNH_GET_INT(MNAME, M) BIND(C, NAME='FFPutInt')
+    		IMPORT C_INT, C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		INTEGER(C_INT), INTENT(OUT) :: M
+    	END SUBROUTINE MNH_GET_INT
+
+    	SUBROUTINE MNH_PUT_INTARRAY(MNAME, M, CURTIME, SIZEIN, SIZEOUT) BIND(C, NAME='FFGetIntArray')
+    		IMPORT C_INT, C_DOUBLE, C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		REAL(C_DOUBLE), INTENT(IN) :: CURTIME
+    		INTEGER(C_INT), INTENT(IN) :: SIZEIN, SIZEOUT
+    		INTEGER(C_INT), DIMENSION(SIZEIN), INTENT(IN) :: M
+    	END SUBROUTINE MNH_PUT_INTARRAY
+
+    	SUBROUTINE MNH_GET_INTARRAY(MNAME, M, SIZEIN, SIZEOUT) BIND(C, NAME='FFPutIntArray')
+    		IMPORT C_INT, C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		INTEGER(C_INT), INTENT(IN) :: SIZEIN, SIZEOUT
+    		INTEGER(C_INT), DIMENSION(SIZEIN), INTENT(OUT) :: M
+    	END SUBROUTINE MNH_GET_INTARRAY
+
+    	SUBROUTINE MNH_PUT_DOUBLE(MNAME, M) BIND(C, NAME='FFGetDouble')
+    		IMPORT C_DOUBLE, C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		REAL(C_DOUBLE), INTENT(IN) :: M
+    	END SUBROUTINE MNH_PUT_DOUBLE
+
+    	SUBROUTINE MNH_GET_DOUBLE(MNAME, M) BIND(C, NAME='FFPutDouble')
+    		IMPORT C_DOUBLE, C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		REAL(C_DOUBLE), INTENT(OUT) :: M
+    	END SUBROUTINE MNH_GET_DOUBLE
+
+    	SUBROUTINE MNH_PUT_DOUBLEARRAY(MNAME, CURTIME, M, SIZEIN, SIZEOUT) BIND(C, NAME='FFGetDoubleArray')
+    		IMPORT C_INT, C_DOUBLE, C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		REAL(C_DOUBLE), INTENT(IN) :: CURTIME
+    		INTEGER(C_INT), INTENT(IN) :: SIZEIN, SIZEOUT
+    		REAL(C_DOUBLE), DIMENSION(SIZEIN), INTENT(IN) :: M
+    	END SUBROUTINE MNH_PUT_DOUBLEARRAY
+
+    	SUBROUTINE MNH_DUMP_DOUBLEARRAY(NMODEL, IP, MNAME, CURTIME, M, SIZEIN, NI, NJ, NK, SIZEOUT) BIND(C, NAME='FFDumpDoubleArray')
+    		IMPORT C_INT, C_DOUBLE, C_CHAR
+     		INTEGER(C_INT), INTENT(IN) :: NMODEL, IP
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		REAL(C_DOUBLE), INTENT(IN) :: CURTIME
+    		INTEGER(C_INT), INTENT(IN) :: SIZEIN, NI, NJ, NK, SIZEOUT
+    		REAL(C_DOUBLE), DIMENSION(SIZEIN), INTENT(IN) :: M
+    	END SUBROUTINE MNH_DUMP_DOUBLEARRAY
+
+    	SUBROUTINE MNH_GET_DOUBLEARRAY(MNAME, M, SIZEIN, SIZEOUT) BIND(C, NAME='FFPutDoubleArray')
+    		IMPORT C_INT, C_DOUBLE, C_CHAR
+    		CHARACTER(KIND=C_CHAR), DIMENSION(*) :: MNAME
+    		INTEGER(C_INT), INTENT(IN) :: SIZEIN, SIZEOUT
+    		REAL(C_DOUBLE), DIMENSION(SIZEIN), INTENT(OUT) :: M
+    	END SUBROUTINE MNH_GET_DOUBLEARRAY
+    	
+    	FUNCTION cast_char_to_c(NAME)
+    		IMPORT C_CHAR, C_NULL_CHAR
+			CHARACTER (LEN=6) :: NAME
+  			CHARACTER(KIND=C_CHAR, LEN=7)	:: cast_char_to_c  
+    	END FUNCTION cast_char_to_c
+
+   END INTERFACE
+
+END MODULE MODD_FOREFIRE_FORTRAN_API
+    	
+FUNCTION cast_char_to_c(NAME)
+   USE&
+        ISO_C_BINDING, ONLY: C_CHAR, C_NULL_CHAR
+	CHARACTER (LEN=6) :: NAME
+  	CHARACTER(KIND=C_CHAR, LEN=7)	:: cast_char_to_c  
+	cast_char_to_c = TRIM(NAME)//C_NULL_CHAR
+END FUNCTION cast_char_to_c
+
diff --git a/src/LIB/FOREFIRE/coupling_forefiren.f90 b/src/LIB/FOREFIRE/coupling_forefiren.f90
new file mode 100644
index 0000000000000000000000000000000000000000..8d5dde80b6873f4caa1f040cbe0233a4a72d1e72
--- /dev/null
+++ b/src/LIB/FOREFIRE/coupling_forefiren.f90
@@ -0,0 +1,314 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!############################## 
+MODULE MODI_COUPLING_FOREFIRE_n
+!############################## 
+
+    INTERFACE
+
+        SUBROUTINE COUPLING_FOREFIRE_n (DT, PSFTH, PSFTQ, PSFSV)
+            IMPLICIT NONE
+            REAL, INTENT(IN)  :: DT    ! time step of mesonh (s)
+            REAL, DIMENSION(:,:),   INTENT(INOUT)  :: PSFTH, PSFTQ ! heat surface flux
+            REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSFSV ! surface flux of scalars
+        END SUBROUTINE COUPLING_FOREFIRE_n
+
+        SUBROUTINE SEND_GROUND_WIND_n (U, V, KG, IINFO)
+            IMPLICIT NONE
+            REAL, DIMENSION(:,:,:), INTENT(IN)  :: U, V ! wind components
+            INTEGER, INTENT(IN) :: KG ! vertical indice of the ground
+            INTEGER, INTENT(IN) :: IINFO ! integer for parallel communications
+        END SUBROUTINE SEND_GROUND_WIND_n
+      
+        SUBROUTINE FOREFIRE_SEND_PARAL_n (IINFO)
+            IMPLICIT NONE
+            INTEGER, INTENT(IN) :: IINFO ! integer for parallel communications
+        END SUBROUTINE FOREFIRE_SEND_PARAL_n
+      
+        SUBROUTINE FOREFIRE_RECEIVE_PARAL_n ()
+            IMPLICIT NONE
+        END SUBROUTINE FOREFIRE_RECEIVE_PARAL_n
+
+        SUBROUTINE FOREFIRE_DUMP_FIELDS_n(U, V, W, MNHSV, TH &
+                                         , R, PABS, TKE, NX, NY, NZ)
+            IMPLICIT NONE
+            REAL, DIMENSION(:,:,:), INTENT(IN)  :: U, V, W ! wind components (m/s)
+            REAL, DIMENSION(:,:,:), INTENT(IN)  :: TH, R, PABS, TKE ! physical fields
+            REAL, DIMENSION(:,:,:,:), INTENT(IN)  :: MNHSV ! other MNH variables (/m3)
+            INTEGER, INTENT(IN) :: NX, NY, NZ ! size of the matrices
+        END SUBROUTINE FOREFIRE_DUMP_FIELDS_n
+      
+    END INTERFACE
+
+      
+END MODULE MODI_COUPLING_FOREFIRE_n
+
+
+!#######################################################
+SUBROUTINE COUPLING_FOREFIRE_n (DT, PSFTH, PSFTQ, PSFSV)
+!#######################################################
+
+!!****  *COUPLING_FOREFIRE_n* -
+!!      P. Tulet CNRM
+!!      X. Pialat SPE
+
+USE MODD_FOREFIRE_n
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_FORTRAN_API
+USE MODD_NSV
+
+IMPLICIT NONE
+
+REAL, INTENT(IN)  							:: DT     			! time step
+REAL, DIMENSION(:,:), INTENT(INOUT)   	:: PSFTH, PSFTQ 	! heat surface flux
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSFSV 			! surface flux of scalars
+
+! bound indices for the scalar variables
+
+INTEGER											:: JSV
+
+!* Advancing the fire simulation for a MNH step
+!
+   CALL MNH_TO_FF_STEP(DT)
+!
+!* Injecting fluxes from the fire simulation into MNH
+!
+	CALL MNH_GET_DOUBLEARRAY(sHeatFlux, FF_HEATFLUX, FF_MATRIXSIZE, 1)
+	PSFTH(:, :) = PSFTH(:, :) + FF_HEATFLUX(:, :)
+
+	CALL MNH_GET_DOUBLEARRAY(sVaporFlux, FF_VAPORFLUX, FF_MATRIXSIZE, 1)
+	PSFTQ(:, :) = PSFTQ(:, :) + FF_VAPORFLUX(:, :)
+
+	DO JSV = 1, NSV_FF
+		CALL MNH_GET_DOUBLEARRAY(sScalarVariables(JSV), FF_SVFLUXES(:, :, JSV), FF_MATRIXSIZE, 1) 
+		PSFSV(:, :, NSV_FFBEG-1+JSV) = PSFSV(:, :, NSV_FFBEG-1+JSV) + FF_SVFLUXES(:, :, JSV)
+	END DO
+	
+	IF ( LFFCHEM ) THEN
+		DO JSV = 1, NFFCHEMVAR
+			CALL MNH_GET_DOUBLEARRAY(sChemicalVariables(JSV), FF_CVFLUXES(:, :, JSV), FF_MATRIXSIZE, 1) 
+			PSFSV(:, :, FF_CHEMINDICES(JSV)) = PSFSV(:, :, FF_CHEMINDICES(JSV)) + FF_CVFLUXES(:, :, JSV)
+		END DO
+	ENDIF
+
+END SUBROUTINE COUPLING_FOREFIRE_n
+
+      	
+!##############################################
+SUBROUTINE SEND_GROUND_WIND_n (U, V, KG, IINFO)
+!##############################################
+
+!!****  *SEND_GROUND_WIND_n* -
+!!      X. Pialat SPE
+
+USE MODD_FOREFIRE_n
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_FORTRAN_API
+
+USE MODE_ll
+USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+
+IMPLICIT NONE
+
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: U, V 		! wind components
+INTEGER, INTENT(IN)						:: KG			! vertical indice of the ground
+INTEGER, INTENT(IN)						:: IINFO		! integer for parallel communications
+
+INTEGER 										:: IFF, JFF, VAL1, VAL2, VAL3
+TYPE(LIST_ll), POINTER           	:: FOREFIREFIELD_ll    ! list of fields to exchange for ForeFire
+
+!
+!* Communicating the surface wind to the forefire simulation
+!
+	CALL MNH_PUT_DOUBLEARRAY(sWindU, FF_TIME, U(:,:,KG:KG), FF_MATRIXSIZE, 1)
+	CALL MNH_PUT_DOUBLEARRAY(swindV, FF_TIME, V(:,:,KG:KG), FF_MATRIXSIZE, 1)
+
+!* Then some non-conventional manipulations to communicate the outer velocities
+	DO IFF = 2, FF_NX-1
+		FFOUTERWINDU(IFF,2) = U(IFF,3,KG)
+		FFOUTERWINDU(IFF,FF_NY-1) = U(IFF,FF_NY-2,KG)
+		FFOUTERWINDV(IFF,2) = V(IFF,3,KG)
+		FFOUTERWINDV(IFF,FF_NY-1) = V(IFF,FF_NY-2,KG)
+	END DO
+	DO JFF = 2, FF_NY-1
+		FFOUTERWINDU(2,JFF) = U(3,JFF,KG)
+		FFOUTERWINDU(FF_NX-1,JFF) = U(FF_NX-2,JFF,KG)
+		FFOUTERWINDV(2,JFF) = V(3,JFF,KG)
+		FFOUTERWINDV(FF_NX-1,JFF) = V(FF_NX-2,JFF,KG)
+	END DO
+	  
+	VAL1 = INT(U(2,3,KG)*FFMULT+0.5)
+	VAL2 = INT(U(3,3,KG)*FFMULT+0.5)
+	VAL3 = INT(U(3,2,KG)*FFMULT+0.5)
+	FFOUTERWINDU(2,2) = VAL1*FFMULT*FFMULT*100 + VAL2*FFMULT*10 + VAL3
+	VAL1 = INT(V(2,3,KG)*FFMULT+0.5)
+	VAL2 = INT(V(3,3,KG)*FFMULT+0.5)
+	VAL3 = INT(V(3,2,KG)*FFMULT+0.5)
+	FFOUTERWINDV(2,2) = VAL1*FFMULT*FFMULT*100 + VAL2*FFMULT*10 + VAL3
+
+	VAL1 = INT(U(FF_NX-2,2,KG)*FFMULT+0.5)
+	VAL2 = INT(U(FF_NX-2,3,KG)*FFMULT+0.5)
+	VAL3 = INT(U(FF_NX-1,3,KG)*FFMULT+0.5)
+	FFOUTERWINDU(FF_NX-1,2) = VAL1*FFMULT*FFMULT*100 + VAL2*FFMULT*10 + VAL3
+	VAL1 = INT(V(FF_NX-2,2,KG)*FFMULT+0.5)
+	VAL2 = INT(V(FF_NX-2,3,KG)*FFMULT+0.5)
+	VAL3 = INT(V(FF_NX-1,3,KG)*FFMULT+0.5)
+	FFOUTERWINDV(FF_NX-1,2) = VAL1*FFMULT*FFMULT*100 + VAL2*FFMULT*10 + VAL3
+
+	VAL1 = INT(U(3,FF_NY-1,KG)*FFMULT+0.5)
+	VAL2 = INT(U(3,FF_NY-2,KG)*FFMULT+0.5)
+	VAL3 = INT(U(2,FF_NY-2,KG)*FFMULT+0.5)
+	FFOUTERWINDU(2,FF_NY-1) = VAL1*FFMULT*FFMULT*100 + VAL2*FFMULT*10 + VAL3
+	VAL1 = INT(V(3,FF_NY-1,KG)*FFMULT+0.5)
+	VAL2 = INT(V(3,FF_NY-2,KG)*FFMULT+0.5)
+	VAL3 = INT(V(2,FF_NY-2,KG)*FFMULT+0.5)
+	FFOUTERWINDV(2,FF_NY-1) = VAL1*FFMULT*FFMULT*100 + VAL2*FFMULT*10 + VAL3
+
+	VAL1 = INT(U(FF_NX-1,FF_NY-2,KG)*FFMULT+0.5)
+	VAL2 = INT(U(FF_NX-2,FF_NY-2,KG)*FFMULT+0.5)
+	VAL3 = INT(U(FF_NX-2,FF_NY-1,KG)*FFMULT+0.5)
+	FFOUTERWINDU(FF_NX-1,FF_NY-1) = VAL1*FFMULT*FFMULT*100 + VAL2*FFMULT*10 + VAL3
+	VAL1 = INT(V(FF_NX-1,FF_NY-2,KG)*FFMULT+0.5)
+	VAL2 = INT(V(FF_NX-2,FF_NY-2,KG)*FFMULT+0.5)
+	VAL3 = INT(V(FF_NX-2,FF_NY-1,KG)*FFMULT+0.5)
+	FFOUTERWINDV(FF_NX-1,FF_NY-1) = VAL1*FFMULT*FFMULT*100 + VAL2*FFMULT*10 + VAL3
+
+	NULLIFY(FOREFIREFIELD_ll)
+	CALL ADD2DFIELD_ll(FOREFIREFIELD_ll,FFOUTERWINDU)
+	CALL ADD2DFIELD_ll(FOREFIREFIELD_ll,FFOUTERWINDV)
+	CALL UPDATE_HALO_ll(FOREFIREFIELD_ll,IINFO)
+	CALL CLEANLIST_ll(FOREFIREFIELD_ll)
+	CALL MNH_PUT_DOUBLEARRAY(sOutWindU, FF_TIME, FFOUTERWINDU, FF_MATRIXSIZE, 1)
+	CALL MNH_PUT_DOUBLEARRAY(sOutWindV, FF_TIME, FFOUTERWINDV, FF_MATRIXSIZE, 1)
+   
+END SUBROUTINE SEND_GROUND_WIND_n
+
+      	
+!#####################################
+SUBROUTINE FOREFIRE_RECEIVE_PARAL_n ()
+!#####################################
+
+!!****  *FOREFIRE_RECEIVE_PARAL_n* -
+!!      X. Pialat SPE
+
+USE MODD_FOREFIRE_n
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_FORTRAN_API
+
+IMPLICIT NONE
+
+	CALL MNH_PUT_DOUBLEARRAY(sPosX, FF_TIME, FFNODES_POSX, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_PUT_DOUBLEARRAY(sPosY, FF_TIME, FFNODES_POSY, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_PUT_DOUBLEARRAY(sVelX, FF_TIME, FFNODES_VELX, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_PUT_DOUBLEARRAY(sVelY, FF_TIME, FFNODES_VELY, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_PUT_DOUBLEARRAY(sTime, FF_TIME, FFNODES_TIME, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_PUT_DOUBLEARRAY(sId, FF_TIME, FFNODES_ID, FF_PARALMATRIXSIZE, 1)
+   
+END SUBROUTINE FOREFIRE_RECEIVE_PARAL_n
+
+      	
+!#######################################
+SUBROUTINE FOREFIRE_SEND_PARAL_n (IINFO)
+!#######################################
+
+!!****  *FOREFIRE_SEND_PARAL_n* -
+!!      X. Pialat (SPE)
+
+USE MODD_FOREFIRE_n
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_FORTRAN_API
+
+USE MODE_ll
+USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+
+IMPLICIT NONE
+
+INTEGER, INTENT(IN)					:: IINFO
+TYPE(LIST_ll), POINTER           :: FOREFIREFIELD_ll    ! list of fields to exchange for ForeFire
+
+	CALL MNH_GET_DOUBLEARRAY(sPosX, FFNODES_POSX, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_GET_DOUBLEARRAY(sPosY, FFNODES_POSY, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_GET_DOUBLEARRAY(sVelX, FFNODES_VELX, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_GET_DOUBLEARRAY(sVelY, FFNODES_VELY, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_GET_DOUBLEARRAY(sTime, FFNODES_TIME, FF_PARALMATRIXSIZE, 1)
+	CALL MNH_GET_DOUBLEARRAY(sId, FFNODES_ID, FF_PARALMATRIXSIZE, 1)
+!
+!* Calling the MNH parallel routines for the forefire-related variables
+!
+	NULLIFY(FOREFIREFIELD_ll)
+	CALL ADD3DFIELD_ll(FOREFIREFIELD_ll, FFNODES_POSX)
+	CALL ADD3DFIELD_ll(FOREFIREFIELD_ll, FFNODES_POSY)
+	CALL ADD3DFIELD_ll(FOREFIREFIELD_ll, FFNODES_VELX)
+	CALL ADD3DFIELD_ll(FOREFIREFIELD_ll, FFNODES_VELY)
+	CALL ADD3DFIELD_ll(FOREFIREFIELD_ll, FFNODES_TIME)
+	CALL ADD3DFIELD_ll(FOREFIREFIELD_ll, FFNODES_ID)
+	CALL UPDATE_HALO_ll(FOREFIREFIELD_ll, IINFO)
+	CALL CLEANLIST_ll(FOREFIREFIELD_ll)
+   
+END SUBROUTINE FOREFIRE_SEND_PARAL_n
+      	
+      	
+!#####################################################
+SUBROUTINE FOREFIRE_DUMP_FIELDS_n(U, V, W, MNHSV, TH &
+									, R, PABS, TKE, NX, NY, NZ)
+!#####################################################
+
+!!****  *FOREFIRE_DUMP_FIELDS_n* -
+!!      X. Pialat (SPE)
+
+USE MODD_NSV
+USE MODD_FOREFIRE_n
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_FORTRAN_API
+USE MODD_CH_M9_n,   	ONLY: CNAMES
+
+IMPLICIT NONE
+
+REAL, DIMENSION(:,:,:), INTENT(IN)  	:: U, V, W 					! wind components (m/s)
+REAL, DIMENSION(:,:,:), INTENT(IN)  	:: TH, R, PABS, TKE 		! physical fields
+REAL, DIMENSION(:,:,:,:), INTENT(IN)  	:: MNHSV 					! other MNH variables (/m3)
+INTEGER, INTENT(IN)							:: NX, NY, NZ				! size of the matrices
+
+INTEGER :: JSV
+
+!
+!* sending the arrays to binary unformatted fortran files for visualization
+!
+	IF ( ((FF_TIME/FFOUTPUTSUPDATE).GE.FFNUMOUT) ) THEN
+		FF3DOUT = 1
+		FFNUMOUT = FFNUMOUT + 1
+	END IF
+	
+	IF ( FF3DOUTPUTSFLOW .AND. FF3DOUT.EQ.1 ) THEN
+		CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, sU, FF_TIME, U, NX*NY*NZ, NX, NY, NZ, 1)
+		CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, sV, FF_TIME, V, NX*NY*NZ, NX, NY, NZ, 1)
+		CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, sW, FF_TIME, W, NX*NY*NZ, NX, NY, NZ, 1)
+		DO JSV = 1, NSV_FF
+			CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, cast_char_to_c(CSV(NSV_FFBEG-1+JSV)) &
+				, FF_TIME, MNHSV(:, :, :, NSV_FFBEG-1+JSV), NX*NY*NZ, NX, NY, NZ, 1)
+		END DO
+	END IF
+	
+	IF ( FF3DOUTPUTSPHYS .AND. FF3DOUT.EQ.1 ) THEN
+		CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, sT, FF_TIME, TH, NX*NY*NZ, NX, NY, NZ, 1)
+		CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, sMoist, FF_TIME, R, NX*NY*NZ, NX, NY, NZ, 1)
+		CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, sP, FF_TIME, PABS, NX*NY*NZ, NX, NY, NZ, 1)
+		CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, sTKE, FF_TIME, TKE, NX*NY*NZ, NX, NY, NZ, 1)
+	END IF
+	
+	IF ( LFFCHEM .AND. FF3DOUTPUTSCHEM .AND. FF3DOUT.EQ.1 ) THEN
+		DO JSV = 1, NFFCHEMVAR
+			CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, cast_char_to_c(CNAMES(FF_CHEMINDICES(JSV))) &
+						, FF_TIME, MNHSV(:, :, :, FF_CHEMINDICES(JSV)), NX*NY*NZ, NX, NY, NZ, 1)
+		END DO
+		DO JSV = 1, NFFCHEMVAROUT
+			CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, cast_char_to_c(CNAMES(FF_CHEMINDOUT(JSV))) &
+						, FF_TIME, MNHSV(:, :, :, FF_CHEMINDOUT(JSV)), NX*NY*NZ, NX, NY, NZ, 1)
+		END DO
+	END IF
+	
+	FF3DOUT = 0
+
+END SUBROUTINE FOREFIRE_DUMP_FIELDS_n
diff --git a/src/LIB/FOREFIRE/init_forefiren.f90 b/src/LIB/FOREFIRE/init_forefiren.f90
new file mode 100644
index 0000000000000000000000000000000000000000..00c85c6238af9cc3d0e675fcfd4b3dce258002e0
--- /dev/null
+++ b/src/LIB/FOREFIRE/init_forefiren.f90
@@ -0,0 +1,202 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!!    ################################ 
+      MODULE MODI_INIT_FOREFIRE_n
+!!    ################################ 
+
+      INTERFACE
+      
+      	SUBROUTINE INIT_FOREFIRE_n(KMODEL, KLUOUT, IP, KYEAR, KMONTH, KDAY, PTIME, DT)
+      	
+      		IMPLICIT NONE
+   			INTEGER, INTENT(IN)    	:: KMODEL    	! number of the model in nest hierarchy
+      		INTEGER, INTENT(IN)    	:: KLUOUT    	! output listing
+				INTEGER, INTENT(IN)		:: IP				! mpi rank of the process
+				INTEGER, INTENT(IN)  	:: KYEAR     	! current year (UTC)
+				INTEGER, INTENT(IN)  	:: KMONTH   	! current month (UTC)
+				INTEGER, INTENT(IN)  	:: KDAY      	! current day (UTC)
+				REAL, INTENT(IN)  		:: PTIME     	! current time since midnight (UTC, s)
+				REAL, INTENT(IN)  		:: DT     		! time-step of MNH (s)
+				
+      	END SUBROUTINE INIT_FOREFIRE_n
+      	
+      END INTERFACE 
+      
+      END MODULE MODI_INIT_FOREFIRE_n
+
+!     ##################################################
+      SUBROUTINE INIT_FOREFIRE_n(KMODEL, KLUOUT, IP, KYEAR, KMONTH, KDAY, PTIME, DT)
+!     ##################################################
+
+!!    AUTHORS
+!!    -------
+!!      P. Tulet  CNRM
+!!      X. Pialat SPE
+
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_n
+USE MODD_FOREFIRE_FORTRAN_API
+
+USE MODD_DYN_n, 		ONLY: NSTOP
+USE MODD_GRID,      	ONLY: XLATORI, XLONORI
+USE MODD_GRID_n,    	ONLY: XXHAT, XYHAT, XZHAT, XZS, XZZ
+USE MODD_NSV,       	ONLY: NSV_CHEMBEG, NSV_CHEMEND, NSV_FF, NSV_FFBEG, NSV_FFEND, CSV
+USE MODD_CH_MNHC_n, 	ONLY: LUSECHEM
+USE MODD_CH_M9_n,   	ONLY: CNAMES
+
+   INTEGER, INTENT(IN)    	:: KMODEL    	! number of the model in nest hierarchy
+   INTEGER, INTENT(IN)    	:: KLUOUT    	! output listing
+	INTEGER, INTENT(IN)		:: IP				! mpi rank of the process
+	INTEGER, INTENT(IN)  	:: KYEAR     	! current year (UTC)
+	INTEGER, INTENT(IN)  	:: KMONTH    	! current month (UTC)
+	INTEGER, INTENT(IN)  	:: KDAY      	! current day (UTC)
+	REAL, INTENT(IN)  		:: PTIME     	! current time since midnight (UTC, s)
+	REAL, INTENT(IN)  		:: DT     		! time-step of MNH (s)
+	
+	INTEGER                 :: IINFO_ll       ! return code of parallel routine
+	INTEGER						:: JSV, JCHEMV
+	
+	LOGICAL 						:: DUMPEDGRID 
+
+	WRITE (KLUOUT,*)  'COUPLING WITH FOREFIRE IN MODEL ', KMODEL
+	
+	!******************************!
+	!* COMMON PART FOR ALL MODELS *!
+	!******************************!
+	
+	! INITIALISATION OF THE FOREFIRE SIMULATION
+	!------------------------------------------
+	CALL MNH_TO_FF_INIT(PTIME)
+   
+   ! SIZE OF THE MATRICES TO RETRIEVE THE SURFACE PROPERTIES
+   !--------------------------------------------------------
+   FF_NX = SIZE(XXHAT)
+   FF_NY = SIZE(XYHAT)
+   FF_NZ = SIZE(XZHAT)
+   FF_MATRIXSIZE = FF_NX*FF_NY
+   
+   ! REFERENCE FOR THE OUTPUTS
+   !--------------------------
+	FFNMODEL = KMODEL
+	PROCID = IP
+	FFOUTPUTSUPDATE = FFOUTUPS(KMODEL)
+	IF ( FFOUTPUTSUPDATE .LE. 0 ) THEN
+		FFOUTPUTSUPDATE = 1000000.
+	ELSE
+		CALL MNH_DUMP_DOUBLEARRAY(FFNMODEL, PROCID, sZgrid, FF_TIME, XZZ, FF_NX*FF_NY*FF_NZ, FF_NX, FF_NY, FF_NZ, 1)
+	ENDIF
+   FFREFERENCETIME = PTIME
+   FF_TIME = 0.
+   FFNUMOUT = 0;
+
+   ! ARE FOREFIRE 3D OUTPUTS REQUESTED BY THE USER ?
+   !------------------------------------------------
+   
+   IF ( FLOWOUT(FFNMODEL) .GT. 0 ) THEN
+      FF3DOUTPUTSFLOW = .TRUE.
+   ELSE
+      FF3DOUTPUTSFLOW = .FALSE.
+   END IF
+   IF ( PHYSOUT(FFNMODEL) .GT. 0 ) THEN
+      FF3DOUTPUTSPHYS = .TRUE.
+   ELSE
+      FF3DOUTPUTSPHYS = .FALSE.
+   END IF
+   IF ( CHEMOUT(FFNMODEL) .GT. 0 ) THEN
+      FF3DOUTPUTSCHEM = .TRUE.
+   ELSE
+      FF3DOUTPUTSCHEM = .FALSE.
+   END IF
+   	
+	!************************************************!
+	!* SPECIFIC PART IS THE MODEL IS COUPLED TO MNH *!
+	!************************************************!
+  
+   IF ( FFCOUPLING ) THEN 
+   	! CREATING THE FOREFIRE DOMAIN
+   	!-----------------------------
+   	CALL MNH_TO_FF_CREATEDOMAIN(IP, KYEAR, KMONTH, KDAY, PTIME, XLATORI, XLONORI &
+   			, FF_NX, XXHAT, FF_NY, XYHAT, FF_NZ, FF_NX*FF_NY*FF_NZ, XZZ, DT)
+
+   	! SETTING THE FIRE SIMULATION TO PARALLEL
+   	!----------------------------------------
+   	CALL MNH_PUT_INT(sParallel, 1)
+
+   		! COMMUNICATING THE NUMBER OF MNH ITERATIONS
+   	!-------------------------------------------
+   	CALL MNH_PUT_INT(sNumIte, NSTOP)
+	
+	   ! COMMUNICATION OF THE OROGRAPHY TO FOREFIRE
+	   !-------------------------------------------
+	   CALL MNH_PUT_DOUBLEARRAY(sAltitude, FF_TIME, XZS, FF_MATRIXSIZE, 1)
+	
+	   ! ALLOCATION OF THE FLUXES STEMMING FROM FOREFIRE
+	   !------------------------------------------------
+	   ALLOCATE(FF_HEATFLUX(FF_NX, FF_NY))
+	 	CALL MNH_TO_FF_CHECKLAYER(sHeatFlux)
+	   ALLOCATE(FF_VAPORFLUX(FF_NX, FF_NY))
+	 	CALL MNH_TO_FF_CHECKLAYER(sVaporFlux)
+	   ALLOCATE(FF_SVFLUXES(FF_NX, FF_NY, NSV_FF))
+	   ALLOCATE(sScalarVariables(NSV_FF))
+	   DO JSV = 1, NSV_FF
+	 		CSV(NSV_FFBEG+JSV-1) = TRIM(FFSVNAMES(JSV))
+	 		sScalarVariables(JSV) = cast_char_to_c(FFSVNAMES(JSV))
+	 		CALL MNH_TO_FF_CHECKLAYER(sScalarVariables(JSV))
+	 	ENDDO
+	
+		! RETRIEVING INFORMATION IN CASE OF CHEMICAL COUPLING
+		!----------------------------------------------------
+		IF ( LFFCHEM ) THEN
+			IF ( .NOT.LUSECHEM ) THEN
+				WRITE(*,*) 'PROBLEM: YOU SWITCHED CHEMISTRY ON IN FOREFIRE WHILE OFF IN MNH'
+			ENDIF
+			ALLOCATE(FF_CHEMINDICES(NFFCHEMVAR))
+	   	ALLOCATE(FF_CVFLUXES(FF_NX, FF_NY, NFFCHEMVAR))
+	   	ALLOCATE(sChemicalVariables(NFFCHEMVAR))
+			DO JSV = 1, NFFCHEMVAR
+	 			sChemicalVariables(JSV) = cast_char_to_c(FFCVNAMES(JSV))
+	 			CALL MNH_TO_FF_CHECKLAYER(sChemicalVariables(JSV))
+		 		DO JCHEMV = 1, NSV_CHEMEND-NSV_CHEMBEG
+		   		IF ( TRIM(CNAMES(JCHEMV)) == TRIM(FFCVNAMES(JSV)) ) THEN
+		   			FF_CHEMINDICES(JSV) = JCHEMV
+		   		END IF
+		 		ENDDO
+		 	ENDDO
+			ALLOCATE(FF_CHEMINDOUT(NFFCHEMVAROUT))
+			DO JSV = 1, NFFCHEMVAROUT
+		 		DO JCHEMV = 1, NSV_CHEMEND-NSV_CHEMBEG
+		   		IF ( TRIM(CNAMES(JCHEMV)) == TRIM(FFCONAMES(JSV)) ) THEN
+		   			FF_CHEMINDOUT(JSV) = JCHEMV
+		   		END IF
+		 		ENDDO
+		 	ENDDO
+		END IF
+	   
+	   ! RETRIEVING THE MAXIMUM NUMBER OF FIRENODES PER MNH CELL
+	   !--------------------------------------------------------
+	   CALL MNH_GET_INT(sNumFNMax, NBFNMAX)
+	   FF_PARALMATRIXSIZE = FF_MATRIXSIZE*NBFNMAX
+	
+	   ! ALLOCATION OF THE MATRICES FOR FOREFIRE PARALLELISATION
+	   !--------------------------------------------------------
+	   ALLOCATE(FFNODES_POSX(FF_NX,FF_NY,NBFNMAX))
+	   ALLOCATE(FFNODES_POSY(FF_NX,FF_NY,NBFNMAX))
+	   ALLOCATE(FFNODES_VELX(FF_NX,FF_NY,NBFNMAX))
+	   ALLOCATE(FFNODES_VELY(FF_NX,FF_NY,NBFNMAX))
+	   ALLOCATE(FFNODES_TIME(FF_NX,FF_NY,NBFNMAX))
+	   ALLOCATE(FFNODES_ID(FF_NX,FF_NY,NBFNMAX))
+	   ALLOCATE(FFOUTERWINDU(FF_NX,FF_NY))
+	   ALLOCATE(FFOUTERWINDV(FF_NX,FF_NY))
+	   FFOUTERWINDU(:,:) = 0.
+	   FFOUTERWINDV(:,:) = 0.
+	   CALL MNH_GET_INT(sMNHmult, FFMULT)
+		
+		! PARALLELIZATION PROCESS
+		!------------------------
+		CALL FOREFIRE_SEND_PARAL_n(IINFO_ll)
+   ENDIF
+
+
+END SUBROUTINE INIT_FOREFIRE_n
diff --git a/src/LIB/FOREFIRE/modd_forefire.f90 b/src/LIB/FOREFIRE/modd_forefire.f90
new file mode 100644
index 0000000000000000000000000000000000000000..4afe973443e1e0f8c13132c7cbeda66b51c4a1e4
--- /dev/null
+++ b/src/LIB/FOREFIRE/modd_forefire.f90
@@ -0,0 +1,42 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!     ######spl
+      MODULE MODD_FOREFIRE
+!     ##################
+!-------------------------------------------------------------------------------
+!***	MODD_LAVA  Declaration of lava module
+!
+!!    AUTHOR
+!!    ------
+!	           : P. Tulet,  LACy / CNRM
+!!            : X. Pialat, SPE
+!	Creation   : 15.02.2012
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*    0. DECLARATIONS
+!        ------------
+! 
+USE MODD_PARAMETERS
+!
+IMPLICIT NONE
+!
+LOGICAL     :: LFOREFIRE = .FALSE.  				! Switch to activate ForeFire coupling
+REAL			:: COUPLINGRES = 100.					! Coupling resolution (above the model is not coupled with ForeFire)
+INTEGER		:: NFFSCALARS = 0							! Number of passive tracers in ForeFire
+CHARACTER(LEN=6), DIMENSION(10) 	:: FFSVNAMES	! Names of the scalar variables
+LOGICAL     :: LFFCHEM = .FALSE.  					! Switch to activate chemistry in ForeFire coupling
+INTEGER		:: NFFCHEMVAR = 0							! Number of chemical variables in ForeFire coupling
+CHARACTER(LEN=6), DIMENSION(10) 	:: FFCVNAMES	! Names of the chemical variables
+INTEGER		:: NFFCHEMVAROUT = 0						! Number of chemical variables for outputs only
+CHARACTER(LEN=6), DIMENSION(10) 	:: FFCONAMES	! Names of the chemical variables
+REAL, DIMENSION(6)					:: FFOUTUPS		! Outputs updates periods for the MNH models
+INTEGER, DIMENSION(6)				:: FLOWOUT		! Booleans for flow variables outputs
+INTEGER, DIMENSION(6)				:: PHYSOUT		! Booleans for physical variables outputs
+INTEGER, DIMENSION(6)				:: CHEMOUT		! Booleans for physical variables outputs
+
+!
+END MODULE MODD_FOREFIRE
diff --git a/src/LIB/FOREFIRE/modd_forefiren.f90 b/src/LIB/FOREFIRE/modd_forefiren.f90
new file mode 100644
index 0000000000000000000000000000000000000000..bea6c974552a5fbd6718f79f8f8ac44fc6b5ea66
--- /dev/null
+++ b/src/LIB/FOREFIRE/modd_forefiren.f90
@@ -0,0 +1,186 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!!    ############################ 
+      MODULE MODD_FOREFIRE_n
+!!    ############################ 
+!!    AUTHOR
+!!    ------
+!!	P. Tulet     *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    07/08
+!-------------------------------------------------------------------------------
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+USE MODD_PARAMETERS, ONLY: JPMODELMAX
+
+IMPLICIT NONE 
+
+TYPE FOREFIRE_t
+
+	! Effective coupling for this model
+	LOGICAL		:: FFCOUPLING
+	
+	! Current time of the simulation
+	REAL 			:: FF_TIME
+	
+	! Dimensions of the matrices of ForeFire
+	INTEGER 		:: FF_MATRIXSIZE, FF_SVMATRIXSIZE
+	INTEGER 		:: FF_NX, FF_NY, FF_NZ
+	
+	! Dimensions of the matrices for parallelization
+	INTEGER 		:: FF_PARALMATRIXSIZE
+
+
+	! INFORMATION TO BE PASSED FROM FOREFIRE TO MNH
+	!----------------------------------------------
+	
+	! Boolean for dumping 3D outputs through ForeFire
+	INTEGER		:: FFNMODEL
+	INTEGER		:: PROCID
+	INTEGER 		:: FF3DOUT
+	LOGICAL 		:: FF3DOUTPUTSFLOW, FF3DOUTPUTSPHYS, FF3DOUTPUTSCHEM
+	REAL 			:: FFOUTPUTSUPDATE
+	REAL 			:: FFNUMOUT
+	REAL 			:: FFREFERENCETIME
+	
+	! Maximum number of fire markers in each MNH cell
+	INTEGER 		:: NBFNMAX
+	
+	! Coefficient for the exchange of information for the outer wind
+	INTEGER 		:: FFMULT
+
+	! Position and velocity of the fire markers in each MNH cell
+	REAL, DIMENSION(:,:,:), POINTER :: FFNODES_POSX
+	REAL, DIMENSION(:,:,:), POINTER :: FFNODES_POSY
+	REAL, DIMENSION(:,:,:), POINTER :: FFNODES_VELX
+	REAL, DIMENSION(:,:,:), POINTER :: FFNODES_VELY
+	REAL, DIMENSION(:,:,:), POINTER :: FFNODES_TIME
+	REAL, DIMENSION(:,:,:), POINTER :: FFNODES_ID
+	
+	! Heat flux stemming from ForeFire in each cell
+	REAL, DIMENSION(:,:), POINTER 	:: FF_HEATFLUX
+	! Vapor flux stemming from ForeFire in each cell
+	REAL, DIMENSION(:,:), POINTER 	:: FF_VAPORFLUX
+	! Scalar variables' fluxes stemming from ForeFire in each cell
+	REAL, DIMENSION(:,:,:), POINTER :: FF_SVFLUXES
+	! Chemical index of the variables in case of chemical coupling
+	INTEGER, DIMENSION(:), POINTER :: FF_CHEMINDICES
+	! Chemical variables' fluxes stemming from ForeFire in each cell
+	REAL, DIMENSION(:,:,:), POINTER :: FF_CVFLUXES
+	! Chemical index of the variables for outputs purpose
+	INTEGER, DIMENSION(:), POINTER :: FF_CHEMINDOUT
+	
+	! Velocities in the outer region of the domain for continuity in the halo
+	REAL, DIMENSION(:,:), POINTER 	:: FFOUTERWINDU
+	REAL, DIMENSION(:,:), POINTER 	:: FFOUTERWINDV
+
+END TYPE FOREFIRE_t
+
+! Definition of the pointers for all the models
+TYPE(FOREFIRE_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: FOREFIRE_MODEL
+
+! Definition of the current pointers
+! Scalars
+LOGICAL, POINTER 	:: FFCOUPLING=>NULL()
+REAL, POINTER 		:: FF_TIME=>NULL()
+INTEGER, POINTER 	:: FF_MATRIXSIZE=>NULL() 
+INTEGER, POINTER 	:: FF_SVMATRIXSIZE=>NULL()
+INTEGER, POINTER 	:: FF_NX=>NULL()
+INTEGER, POINTER 	:: FF_NY=>NULL()
+INTEGER, POINTER 	:: FF_NZ=>NULL()
+INTEGER, POINTER 	:: FF_PARALMATRIXSIZE=>NULL()
+INTEGER, POINTER 	:: FFNMODEL=>NULL()
+INTEGER, POINTER 	:: PROCID=>NULL()
+INTEGER, POINTER 	:: FF3DOUT=>NULL()
+LOGICAL, POINTER 	:: FF3DOUTPUTSFLOW=>NULL()
+LOGICAL, POINTER 	:: FF3DOUTPUTSPHYS=>NULL()
+LOGICAL, POINTER 	:: FF3DOUTPUTSCHEM=>NULL()
+REAL, POINTER 		:: FFOUTPUTSUPDATE=>NULL()
+REAL, POINTER 		:: FFNUMOUT=>NULL()
+REAL, POINTER 		:: FFREFERENCETIME=>NULL()
+INTEGER, POINTER 	:: NBFNMAX=>NULL()
+INTEGER, POINTER 	:: FFMULT=>NULL()
+! Arrays
+REAL, DIMENSION(:,:,:), POINTER 	:: FFNODES_POSX=>NULL()
+REAL, DIMENSION(:,:,:), POINTER 	:: FFNODES_POSY=>NULL()
+REAL, DIMENSION(:,:,:), POINTER 	:: FFNODES_VELX=>NULL()
+REAL, DIMENSION(:,:,:), POINTER 	:: FFNODES_VELY=>NULL()
+REAL, DIMENSION(:,:,:), POINTER 	:: FFNODES_TIME=>NULL()
+REAL, DIMENSION(:,:,:), POINTER 	:: FFNODES_ID=>NULL()
+REAL, DIMENSION(:,:), POINTER 	:: FF_HEATFLUX=>NULL()
+REAL, DIMENSION(:,:), POINTER 	:: FF_VAPORFLUX=>NULL()
+REAL, DIMENSION(:,:,:), POINTER 	:: FF_SVFLUXES=>NULL()
+REAL, DIMENSION(:,:,:), POINTER 	:: FF_CVFLUXES=>NULL()
+INTEGER, DIMENSION(:), POINTER :: FF_CHEMINDICES=>NULL()
+INTEGER, DIMENSION(:), POINTER :: FF_CHEMINDOUT=>NULL()
+REAL, DIMENSION(:,:), POINTER 	:: FFOUTERWINDU=>NULL()
+REAL, DIMENSION(:,:), POINTER 	:: FFOUTERWINDV=>NULL()
+
+CONTAINS
+
+SUBROUTINE FOREFIRE_GOTO_MODEL(KFROM, KTO)
+
+INTEGER, INTENT(IN) :: KFROM, KTO
+
+! Save current state for allocated arrays
+FOREFIRE_MODEL(KFROM)%FFNODES_POSX=>FFNODES_POSX
+FOREFIRE_MODEL(KFROM)%FFNODES_POSY=>FFNODES_POSY
+FOREFIRE_MODEL(KFROM)%FFNODES_VELX=>FFNODES_VELX
+FOREFIRE_MODEL(KFROM)%FFNODES_VELY=>FFNODES_VELY
+FOREFIRE_MODEL(KFROM)%FFNODES_TIME=>FFNODES_TIME
+FOREFIRE_MODEL(KFROM)%FFNODES_ID=>FFNODES_ID
+FOREFIRE_MODEL(KFROM)%FF_HEATFLUX=>FF_HEATFLUX
+FOREFIRE_MODEL(KFROM)%FF_VAPORFLUX=>FF_VAPORFLUX
+FOREFIRE_MODEL(KFROM)%FF_SVFLUXES=>FF_SVFLUXES
+FOREFIRE_MODEL(KFROM)%FF_CHEMINDICES=>FF_CHEMINDICES
+FOREFIRE_MODEL(KFROM)%FF_CHEMINDOUT=>FF_CHEMINDOUT
+FOREFIRE_MODEL(KFROM)%FF_CVFLUXES=>FF_CVFLUXES
+FOREFIRE_MODEL(KFROM)%FFOUTERWINDU=>FFOUTERWINDU
+FOREFIRE_MODEL(KFROM)%FFOUTERWINDV=>FFOUTERWINDV
+
+! Current model is set to model KTO
+! Scalars
+FFCOUPLING=>FOREFIRE_MODEL(KTO)%FFCOUPLING
+FF_TIME=>FOREFIRE_MODEL(KTO)%FF_TIME
+FF_MATRIXSIZE=>FOREFIRE_MODEL(KTO)%FF_MATRIXSIZE
+FF_SVMATRIXSIZE=>FOREFIRE_MODEL(KTO)%FF_SVMATRIXSIZE
+FF_NX=>FOREFIRE_MODEL(KTO)%FF_NX
+FF_NY=>FOREFIRE_MODEL(KTO)%FF_NY
+FF_NZ=>FOREFIRE_MODEL(KTO)%FF_NZ
+FF_PARALMATRIXSIZE=>FOREFIRE_MODEL(KTO)%FF_PARALMATRIXSIZE
+FFNMODEL=>FOREFIRE_MODEL(KTO)%FFNMODEL
+PROCID=>FOREFIRE_MODEL(KTO)%PROCID
+FF3DOUT=>FOREFIRE_MODEL(KTO)%FF3DOUT
+FF3DOUTPUTSFLOW=>FOREFIRE_MODEL(KTO)%FF3DOUTPUTSFLOW
+FF3DOUTPUTSPHYS=>FOREFIRE_MODEL(KTO)%FF3DOUTPUTSPHYS
+FF3DOUTPUTSCHEM=>FOREFIRE_MODEL(KTO)%FF3DOUTPUTSCHEM
+FFOUTPUTSUPDATE=>FOREFIRE_MODEL(KTO)%FFOUTPUTSUPDATE
+FFNUMOUT=>FOREFIRE_MODEL(KTO)%FFNUMOUT
+FFREFERENCETIME=>FOREFIRE_MODEL(KTO)%FFREFERENCETIME
+NBFNMAX=>FOREFIRE_MODEL(KTO)%NBFNMAX
+FFMULT=>FOREFIRE_MODEL(KTO)%FFMULT
+! Arrays
+FFNODES_POSX=>FOREFIRE_MODEL(KTO)%FFNODES_POSX
+FFNODES_POSY=>FOREFIRE_MODEL(KTO)%FFNODES_POSY
+FFNODES_VELX=>FOREFIRE_MODEL(KTO)%FFNODES_VELX
+FFNODES_VELY=>FOREFIRE_MODEL(KTO)%FFNODES_VELY
+FFNODES_TIME=>FOREFIRE_MODEL(KTO)%FFNODES_TIME
+FFNODES_ID=>FOREFIRE_MODEL(KTO)%FFNODES_ID
+FF_HEATFLUX=>FOREFIRE_MODEL(KTO)%FF_HEATFLUX
+FF_VAPORFLUX=>FOREFIRE_MODEL(KTO)%FF_VAPORFLUX
+FF_SVFLUXES=>FOREFIRE_MODEL(KTO)%FF_SVFLUXES
+FF_CHEMINDICES=>FOREFIRE_MODEL(KTO)%FF_CHEMINDICES
+FF_CHEMINDOUT=>FOREFIRE_MODEL(KTO)%FF_CHEMINDOUT
+FF_CVFLUXES=>FOREFIRE_MODEL(KTO)%FF_CVFLUXES
+FFOUTERWINDU=>FOREFIRE_MODEL(KTO)%FFOUTERWINDU
+FFOUTERWINDV=>FOREFIRE_MODEL(KTO)%FFOUTERWINDV
+
+END SUBROUTINE FOREFIRE_GOTO_MODEL
+
+END MODULE MODD_FOREFIRE_n
diff --git a/src/LIB/FOREFIRE/modn_forefire.f90 b/src/LIB/FOREFIRE/modn_forefire.f90
new file mode 100644
index 0000000000000000000000000000000000000000..a1e956163d9f898b4128677f1161619c594a1f7e
--- /dev/null
+++ b/src/LIB/FOREFIRE/modn_forefire.f90
@@ -0,0 +1,32 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!     ######spl
+      MODULE MODN_FOREFIRE
+!     ##################
+!-------------------------------------------------------------------------------
+!***	MODN_FOREFIRE  Declaration of namelist NAM_FOREFIRE
+!
+!!    AUTHOR
+!!    ------
+!	           : P. Tulet (LACy / CNRM)
+!!              X. Pialat (SPE)
+!	Creation   : 09.10.2010
+!-------------------------------------------------------------------------------
+!
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+USE MODD_FOREFIRE
+!
+IMPLICIT NONE
+!
+NAMELIST /NAM_FOREFIRE/LFOREFIRE, COUPLINGRES, &
+		NFFSCALARS, FFSVNAMES, &
+		LFFCHEM, NFFCHEMVAR, FFCVNAMES, &
+		NFFCHEMVAROUT, FFCONAMES, &
+		FFOUTUPS, FLOWOUT, PHYSOUT, CHEMOUT
+! 
+END MODULE MODN_FOREFIRE
diff --git a/src/MNH/boundaries.f90 b/src/MNH/boundaries.f90
index 85ede1e2af582bca6606bd66b5a2639a7a28741b..09452c27ab3d65a74783781c273c6845fcc62499 100644
--- a/src/MNH/boundaries.f90
+++ b/src/MNH/boundaries.f90
@@ -165,6 +165,7 @@ END MODULE MODI_BOUNDARIES
 !!      Modification    05/06               Remove EPS
 !!      Modification    12/2010  (Chong)    Add boundary condition for ions
 !!                                          (fair weather profiles)
+!!      Modification    07/2013  (Bosseur & Filippi) adds Forefire
 !!      Modification    04/2013  (C.Lac)    Remove instant M               
 !-------------------------------------------------------------------------------
 !
@@ -183,7 +184,10 @@ USE MODD_CONDSAMP,    ONLY : LCONDSAMP
 USE MODD_ELEC_DESCR             
 USE MODD_ELEC_n                 
 USE MODD_REF_n    
-USE MODD_PARAM_n,     ONLY : CELEC 
+USE MODD_PARAM_n,    ONLY : CELEC 
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE,   ONLY : LFOREFIRE
+#endif
 !
 USE MODE_MODELN_HANDLER
 !
@@ -251,14 +255,14 @@ REAL                :: ZTSTEP    ! effective time step
 INTEGER             :: ILBX,ILBY ! size of LB fields' arrays
 LOGICAL, SAVE, DIMENSION(:), ALLOCATABLE :: GCHBOUNDARY, GAERBOUNDARY,&
                     GDSTBOUNDARY, GSLTBOUNDARY, GPPBOUNDARY,          &
-                    GCSBOUNDARY, GICBOUNDARY
+                    GCSBOUNDARY, GICBOUNDARY 
 LOGICAL, SAVE        :: GFIRSTCALL1 = .TRUE.
 LOGICAL, SAVE        :: GFIRSTCALL2 = .TRUE.
 LOGICAL, SAVE        :: GFIRSTCALL3 = .TRUE.
 LOGICAL, SAVE        :: GFIRSTCALL5 = .TRUE. 
 LOGICAL, SAVE        :: GFIRSTCALLPP = .TRUE.                         
 LOGICAL, SAVE        :: GFIRSTCALLCS = .TRUE.                         
-LOGICAL, SAVE        :: GFIRSTCALLIC = .TRUE.                         
+LOGICAL, SAVE        :: GFIRSTCALLIC = .TRUE.                 
 !
 REAL, DIMENSION(SIZE(PLBXWM,1),SIZE(PLBXWM,2),SIZE(PLBXWM,3)) ::  &
                        ZLBXVT,ZLBXWT,ZLBXTHT
@@ -279,6 +283,11 @@ REAL, DIMENSION(SIZE(PLBYSVM,1),SIZE(PLBYSVM,2),SIZE(PLBYSVM,3),SIZE(PLBYSVM,4))
 LOGICAL              :: GCHTMP
 LOGICAL              :: GPPTMP
 LOGICAL              :: GCSTMP
+#ifdef MNH_FOREFIRE
+LOGICAL, SAVE, DIMENSION(:), ALLOCATABLE ::  GFFBOUNDARY
+LOGICAL, SAVE        :: GFIRSTCALLFF = .TRUE.                         
+LOGICAL              :: GFFTMP
+#endif
 !
 !-------------------------------------------------------------------------------
 !
@@ -945,6 +954,33 @@ IF ( LCONDSAMP .AND. IMI == 1) THEN
     ENDIF
   ENDDO
 ENDIF
+#ifdef MNH_FOREFIRE
+!ForeFire 
+IF ( LFOREFIRE .AND. IMI == 1) THEN
+  IF (GFIRSTCALLFF) THEN
+    ALLOCATE(GFFBOUNDARY(NSV_FF))
+    GFIRSTCALLFF = .FALSE.
+    DO JSV=NSV_FFBEG,NSV_FFEND
+      GFFTMP = .FALSE.
+      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0)
+      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0)
+      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0)
+      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0)
+      GFFBOUNDARY(JSV-NSV_FFBEG+1) = GFFTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_FFBEG,NSV_FFEND
+    IF (GFFBOUNDARY(JSV-NSV_FFBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+       CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV))
+      ELSE
+!!$        CALL CH_BOUNDARIES (HLBCX,HLBCY,PSVM(:,:,:,JSV),PUM,PVM,PSVM(:,:,:,JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+#endif
 !
 IF ( CELEC /= 'NONE' .AND. IMI == 1) THEN
   CALL ION_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT)
diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90
index 8b7c65cc5f3900527459b638ca987da62d363225..93b3cb0781d1542ce9a0c11396497d040faf8039 100644
--- a/src/MNH/default_desfmn.f90
+++ b/src/MNH/default_desfmn.f90
@@ -205,6 +205,7 @@ END MODULE MODI_DEFAULT_DESFM_n
 !!                   13/01/11           add LCH_RET_ICE
 !!                   01/07/11 (F.Couvreux) Add CONDSAMP
 !!                   01/07/11 (B.Aouizerats) Add CAOP    
+!!                   07/2013  (Bosseur & Filippi) adds Forefire
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -247,6 +248,9 @@ USE MODD_MEAN_FIELD
 USE MODD_DRAGTREE
 USE MODD_LATZ_EDFLX
 USE MODD_2D_FRC
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+#endif
 !
 IMPLICIT NONE
 !
@@ -379,6 +383,9 @@ LHORELAX_SVSLT  = .FALSE.
 LHORELAX_SVPP   = .FALSE.
 LHORELAX_SVCS   = .FALSE.
 LHORELAX_SVAER  = .FALSE.
+#ifdef MNH_FOREFIRE
+LHORELAX_SVFF   = .FALSE.
+#endif
 !
 !-------------------------------------------------------------------------------
 !
@@ -1194,6 +1201,21 @@ XUV_FLX1=3.E+14
 XUV_FLX2=0.
 LTH_FLX=.FALSE.
 XTH_FLX=0.75
+#ifdef MNH_FOREFIRE
+!-------------------------------------------------------------------------------
+!
+!*      27.   SET DEFAULT VALUES FOR MODD_FOREFIRE         
+!             ----------------------------------
+!
+! other values initialized in modd_forefire
+!
+IF (KMI == 1) THEN 
+  LFOREFIRE = .FALSE.
+  LFFCHEM = .FALSE.
+  COUPLINGRES = 100.
+  NFFSCALARS = 0
+ENDIF  
+#endif                 
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE DEFAULT_DESFM_n
diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90
index 77140fe7d4b1570e27313832021dd5658af1b454..69fe137aac80d8fd3decf0691af0c92a3697a56b 100644
--- a/src/MNH/goto_model_wrapper.f90
+++ b/src/MNH/goto_model_wrapper.f90
@@ -11,6 +11,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      06/12 (Tomasini) Grid-nesting of ADVFRC and EDDY_FLUX
+!!      07/13 (Bosseur & Filippi) adds Forefire
 !-----------------------------------------------------------------
 MODULE MODI_GOTO_MODEL_WRAPPER
 
@@ -61,6 +62,9 @@ USE MODD_PARAM_MFSHALL_n
 USE MODD_PARAM_n
 USE MODD_PARAM_RAD_n
 USE MODD_PASPOL_n
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE_n
+#endif
 USE MODD_PRECIP_n
 USE MODD_ELEC_n
 USE MODD_PROFILER_n
@@ -136,6 +140,9 @@ CALL PARAM_MFSHALL_GOTO_MODEL(KFROM, KTO)
 CALL PARAM_GOTO_MODEL(KFROM, KTO)
 CALL PARAM_RAD_GOTO_MODEL(KFROM, KTO)
 CALL PASPOL_GOTO_MODEL(KFROM, KTO)
+#ifdef MNH_FOREFIRE
+CALL FOREFIRE_GOTO_MODEL(KFROM, KTO)
+#endif
 CALL PRECIP_GOTO_MODEL(KFROM, KTO)
 CALL ELEC_GOTO_MODEL(KFROM, KTO)
 CALL PROFILER_GOTO_MODEL(KFROM, KTO)
diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90
index 43df727c6d6290fa80739c8041e59124e0cfc8f4..ef0cccfbc9a72388aa40c92c607c942069469af6 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -103,6 +103,7 @@ END MODULE MODI_GROUND_PARAM_n
 !      (P.Tulet )             01/11/03  externalisation of the surface chemistry!
 !!     (D.Gazen)              01/12/03  change emissions handling for surf. externalization
 !!     (J.escobar)            18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n
+!      (J.escobar)            2/2014 add Forefire coupling
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -112,7 +113,7 @@ USE MODD_CST,        ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD,
 USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF
 USE MODD_DYN_n,      ONLY : XTSTEP
 USE MODD_CH_MNHC_n,  ONLY : LCH_SURFACE_FLUX
-USE MODD_FIELD_n,    ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT
+USE MODD_FIELD_n,    ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET
 USE MODD_METRICS_n,  ONLY : XDXX, XDYY, XDZZ
 USE MODD_DIM_n,      ONLY : NKMAX
 USE MODD_GRID_n,     ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, &
@@ -147,6 +148,12 @@ USE MODI_DIAG_SURF_ATM_n
 !
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+#ifdef MNH_FOREFIRE
+!** MODULES FOR FOREFIRE **!
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_n
+USE MODI_COUPLING_FOREFIRE_n
+#endif
 !
 USE MODD_TIME_n
 USE MODD_TIME
@@ -517,6 +524,31 @@ END IF
 ! Transform 1D output fields into 2D:
 !
 CALL UNSHAPE_SURF(IDIM1,IDIM2)
+#ifdef MNH_FOREFIRE
+!------------------------!
+! COUPLING WITH FOREFIRE !
+!------------------------!
+	
+IF ( LFOREFIRE ) THEN
+	CALL FOREFIRE_DUMP_FIELDS_n(XUT, XVT, XWT, XSVT&
+	           , XTHT, XRT(:,:,:,1), XPABST, XTKET&
+	           , IDIM1+2, IDIM2+2, NKMAX+2)
+END IF
+
+IF ( FFCOUPLING ) THEN
+
+	CALL SEND_GROUND_WIND_n(XUT, XVT, IKB, IINFO_ll)
+	
+	CALL FOREFIRE_RECEIVE_PARAL_n()
+   
+   CALL COUPLING_FOREFIRE_n(XTSTEP, ZSFTH, ZSFTQ, ZSFTS)
+	
+	CALL FOREFIRE_SEND_PARAL_n(IINFO_ll)
+   
+END IF
+
+FF_TIME = FF_TIME + XTSTEP
+#endif
 !
 ! Friction of components along slope axes (U: largest local slope axis, V: zero slope axis)
 !
diff --git a/src/MNH/ini_cpl.f90 b/src/MNH/ini_cpl.f90
index 4ee8f1d31c705e90018de56158da49e23e976faa..84b4582a07317bb31e166c706f9958432b1d66dd 100644
--- a/src/MNH/ini_cpl.f90
+++ b/src/MNH/ini_cpl.f90
@@ -212,6 +212,7 @@ END MODULE MODI_INI_CPL
 !!      Modification   (Masson)  01/2004 surface externalization, removes 
 !!                                       SST forcing
 !!      Modification             05/2006  Remove KEPS
+!!                     (Escobar) 2/2014 add Forefire
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -234,6 +235,11 @@ USE MODI_TEMPORAL_DIST
 USE MODE_FMREAD
 USE MODI_INI_LS
 USE MODI_INI_LB
+#ifdef MNH_FOREFIRE
+USE MODD_PASPOL
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_n
+#endif
 !
 IMPLICIT NONE
 !
@@ -505,6 +511,10 @@ CALL INI_LS(CCPLFILE(NCPL_CUR),HLUOUT,HGETRVM,GLSOURCE,PLSUS,PLSVS,PLSWS,PLSTHS,
 !IF ( LUSECHEM .AND. (.NOT. OCH_INIT_FIELD) )  &
 !   YGETSVM(NSV_CHEMBEG: NSV_CHEMEND) = 'INIT'
 !IF (HCONF == 'RESTA')  THEN
+#ifdef MNH_FOREFIRE
+!   IF (LPASPOL) YGETSVM(NSV_PPBEG: NSV_PPEND) = 'INIT'
+!   IF (LFOREFIRE) YGETSVM(NSV_FFBEG: NSV_FFEND) = 'INIT'
+#endif
 !   IF (NSV_USER /= 0) YGETSVM(1/NSV_USER) = 'INIT'
 !   IF (NSV_C2R2 /= 0) YGETSVM(NSV_C2R2BEG: NSV_C2R2END) = 'INIT'
 !   IF (NSV_C1R3 /= 0) YGETSVM(NSV_C1R3BEG: NSV_C1R3END) = 'INIT'
diff --git a/src/MNH/ini_dynamics.f90 b/src/MNH/ini_dynamics.f90
index 0a8f3c8593e409cfa3fd0af6d09dc53591dcfe20..c5c85d1c587bbd44706f339613be0b3458098226 100644
--- a/src/MNH/ini_dynamics.f90
+++ b/src/MNH/ini_dynamics.f90
@@ -14,6 +14,9 @@ SUBROUTINE INI_DYNAMICS(HLUOUT,PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ,            &
                OHORELAX_SVC2R2,OHORELAX_SVC1R3,OHORELAX_SVELEC,OHORELAX_SVLG,&
                OHORELAX_SVCHEM,OHORELAX_SVAER,OHORELAX_SVDST,OHORELAX_SVSLT, &
                OHORELAX_SVPP,OHORELAX_SVCS,  OHORELAX_SVCHIC,                &
+#ifdef MNH_FOREFIRE
+               OHORELAX_SVFF,                                                &
+#endif
                PRIMKMAX,KRIMX,KRIMY,PALKTOP,PALKGRD,PALZBOT,PALZBAS,         &
                PT4DIFU,PT4DIFTH,PT4DIFSV,                                    &
                PCORIOX,PCORIOY,PCORIOZ,PCURVX,PCURVY,                        &
@@ -85,6 +88,10 @@ LOGICAL,             INTENT(IN):: OHORELAX_SVSLT  ! switch for the
                        ! horizontal relaxation for slt variables
 LOGICAL,             INTENT(IN):: OHORELAX_SVPP   ! switch for the 
                        ! horizontal relaxation for passive pollutants
+#ifdef MNH_FOREFIRE
+LOGICAL,             INTENT(IN):: OHORELAX_SVFF   ! switch for the 
+                       ! horizontal relaxation for ForeFire variables
+#endif
 LOGICAL,             INTENT(IN):: OHORELAX_SVCS   ! switch for the 
                        ! horizontal relaxation for conditional sampling
 REAL,                    INTENT(IN)    :: PRIMKMAX !Max. value of the horiz.
@@ -177,6 +184,9 @@ SUBROUTINE INI_DYNAMICS(HLUOUT,PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ,            &
                OHORELAX_SVC2R2,OHORELAX_SVC1R3,OHORELAX_SVELEC,OHORELAX_SVLG,&
                OHORELAX_SVCHEM,OHORELAX_SVAER,OHORELAX_SVDST,OHORELAX_SVSLT, &
                OHORELAX_SVPP,OHORELAX_SVCS,  OHORELAX_SVCHIC,                &
+#ifdef MNH_FOREFIRE
+               OHORELAX_SVFF,                                                &
+#endif
                PRIMKMAX,KRIMX,KRIMY,PALKTOP,PALKGRD,PALZBOT,PALZBAS,         &
                PT4DIFU,PT4DIFTH,PT4DIFSV,                                    &
                PCORIOX,PCORIOY,PCORIOZ,PCURVX,PCURVY,                        &
@@ -266,6 +276,7 @@ SUBROUTINE INI_DYNAMICS(HLUOUT,PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ,            &
 !!      Modification    16/01/95  (J.Stein) conditional CALL to trid for 1D case
 !!      Modification    13/08/98  (N.Asencio) add parallel code
 !!      Modification    20/05/06  Remove KEPS
+!!      Modification    07/2013   (Bosseur & Filippi) Adds Forefire
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -345,6 +356,10 @@ LOGICAL,             INTENT(IN):: OHORELAX_SVSLT  ! switch for the
                        ! horizontal relaxation for slt variables
 LOGICAL,             INTENT(IN):: OHORELAX_SVPP   ! switch for the 
                        ! horizontal relaxation for passive pollutants
+#ifdef MNH_FOREFIRE
+LOGICAL,             INTENT(IN):: OHORELAX_SVFF   ! switch for the 
+                       ! horizontal relaxation for ForeFire variables
+#endif
 LOGICAL,             INTENT(IN):: OHORELAX_SVCS   ! switch for the 
                        ! horizontal relaxation for conditional sampling
 REAL,                    INTENT(IN)    :: PRIMKMAX !Max. value of the horiz.
@@ -433,7 +448,11 @@ INTEGER                                    :: ILUOUT,IRESP ! Logical unit number
 INTEGER                                    :: IIU,IJU !  Upper bounds in x,y directions
 LOGICAL                                    :: GHORELAX
 LOGICAL, DIMENSION(7) :: GHORELAXR ! local array of logical
+#ifdef MNH_FOREFIRE
+LOGICAL, DIMENSION(12):: GHORELAXSV! local array of logical
+#else
 LOGICAL, DIMENSION(11):: GHORELAXSV! local array of logical
+#endif
 !
 !-------------------------------------------------------------------------------
 !
@@ -502,6 +521,9 @@ GHORELAXSV(8) = OHORELAX_SVSLT
 GHORELAXSV(9) = OHORELAX_SVPP
 GHORELAXSV(10)= OHORELAX_SVCS
 GHORELAXSV(11) = OHORELAX_SVCHIC
+#ifdef MNH_FOREFIRE
+GHORELAXSV(12) = OHORELAX_SVFF
+#endif
 !
 GHORELAX=ANY(GHORELAXR) .OR. ANY(GHORELAXSV) .OR. ANY(OHORELAX_SV) &
                         .OR. OHORELAX_UVWTH  .OR. OHORELAX_TKE 
diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90
index 8e0b3fd42f035dfe28a89ff1d0f353fc33931e1f..b92924f6cba6b8a0873d7ec74f4194540767c51a 100644
--- a/src/MNH/ini_lb.f90
+++ b/src/MNH/ini_lb.f90
@@ -124,6 +124,7 @@ SUBROUTINE INI_LB(HINIFILE,HLUOUT,OLSOURCE,KSV,                    &
 !!                      20/05/06    Remove KEPS
 !!      C.Lac           20/03/08    Add passive pollutants
 !!      M.Leriche       16/07/10    Add ice phase chemical species
+!!      Pialat/tulet    15/02/12    Add ForeFire scalars 
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -1098,6 +1099,53 @@ DO JSV = NSV_PPBEG, NSV_PPEND
     IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
   END SELECT
 END DO
+#ifdef MNH_FOREFIRE
+! ForeFire scalar variables
+DO JSV = NSV_FFBEG, NSV_FFEND
+  SELECT CASE(HGETSVM(JSV))
+  CASE ('READ')
+    IF ( KSIZELBXSV_ll /= 0 ) THEN
+      YRECFM = 'LBX_FF'
+      YDIRLB='LBX'
+      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,&
+           & IGRID,ILENCH,YCOMMENT,IRESP)
+       WRITE(ILUOUT,*) 'ForeFire LBX_FF ', IRESP
+       IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
+        IF (IRESP/=0) THEN
+          IF (PRESENT(PLBXSVMM)) THEN
+            PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
+            WRITE(ILUOUT,*) 'ForeFire pollutant PLBXSVM   will be initialized to 0'
+          ELSE
+            PLBXSVM(:,:,:,JSV)=0.
+            WRITE(ILUOUT,*) 'ForeFire pollutant PLBXSVM   will be initialized to 0'
+          ENDIF
+        END IF
+      END IF
+    END IF
+!
+    IF (KSIZELBYSV_ll  /= 0 ) THEN
+      YRECFM = 'LBY_FF'
+      YDIRLB='LBY'
+      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,&
+           & IGRID,ILENCH,YCOMMENT,IRESP)
+      IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
+        IF (IRESP/=0) THEN
+          IF (PRESENT(PLBYSVMM)) THEN
+            PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
+            WRITE(ILUOUT,*) 'ForeFire scalar variable PLBYSVM will be initialized to 0'
+          ELSE
+            PLBYSVM(:,:,:,JSV)=0.
+            WRITE(ILUOUT,*) 'ForeFire scalar variable PLBYSVM will be initialized to 0'
+          ENDIF
+        END IF
+      END IF
+    END IF
+  CASE('INIT')
+    IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
+    IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
+  END SELECT
+END DO
+#endif
 ! Conditional sampling variables
 DO JSV = NSV_CSBEG, NSV_CSEND
   SELECT CASE(HGETSVM(JSV))
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index 83c10138343b82622113e30051df0833879b98a8..e4c1e905c29bf569f897b4cb44e4453ef5c7981f 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -257,6 +257,7 @@ END MODULE MODI_INI_MODEL_n
 !!                   June  2011  (B.Aouizerats) Prognostic aerosols
 !!                   June  2011  (P.Aumond) Drag of the vegetation  
 !!                                         + Mean fields
+!!                   July  2013  (Bosseur & Filippi) Adds Forefire
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -384,6 +385,11 @@ USE MODI_INI_AEROSET4
 USE MODI_INI_AEROSET5
 USE MODI_INI_AEROSET6
 !
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_n
+USE MODI_INIT_FOREFIRE_n
+#endif
 USE MODI_INI_LES_N
 USE MODI_GOTO_SURFEX
 USE MODI_INI_SERIES_N
@@ -1743,6 +1749,9 @@ CALL INI_DYNAMICS(HLUOUT,XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT,     &
              LHORELAX_SVC2R2,LHORELAX_SVC1R3,LHORELAX_SVELEC,LHORELAX_SVLG,   &
              LHORELAX_SVCHEM,LHORELAX_SVAER,LHORELAX_SVDST,LHORELAX_SVSLT,    &
              LHORELAX_SVPP,LHORELAX_SVCS,LHORELAX_SVCHIC,                     &
+#ifdef MNH_FOREFIRE
+             LHORELAX_SVFF,                                                   &
+#endif
              XRIMKMAX,NRIMX,NRIMY,                                            &
              XALKTOP,XALKGRD,XALZBOT,XALZBAS,                                 &
              XT4DIFU,XT4DIFTH,XT4DIFSV,                                       &
@@ -2058,6 +2067,29 @@ CALL INI_AEROSET3
 CALL INI_AEROSET4
 CALL INI_AEROSET5
 CALL INI_AEROSET6
+#ifdef MNH_FOREFIRE
+! 
+!-------------------------------------------------------------------------------
 !
+!*      29.    FOREFIRE initializations
+!              ------------------------
+!
+
+! Coupling with ForeFire if resolution is low enough
+!---------------------------------------------------
+IF ( LFOREFIRE .AND. 0.5*(XXHAT(2)-XXHAT(1)+XYHAT(2)-XYHAT(1)) < COUPLINGRES ) THEN
+	FFCOUPLING = .TRUE.	
+ELSE
+	FFCOUPLING = .FALSE.
+ENDIF
+
+! Initializing the ForeFire variables
+!------------------------------------
+IF ( LFOREFIRE ) THEN
+	CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP &
+		, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, XTSTEP)
+END IF
+#endif
+
 END SUBROUTINE INI_MODEL_n
 
diff --git a/src/MNH/ini_nsv.f90 b/src/MNH/ini_nsv.f90
index 62f8cd6c420a2d793f28f53ac3c1a79b01e4f25b..83d7f7ff3cab7721609544e1e90f897f776cd766 100644
--- a/src/MNH/ini_nsv.f90
+++ b/src/MNH/ini_nsv.f90
@@ -58,6 +58,7 @@ END MODULE MODI_INI_NSV
 !!      M. Chong       26/01/10   Add Small ions
 !!      Modification   07/2010   (Leriche) add SV for ice chemistry
 !!      X.Pialat & J.Escobar 11/2012 remove deprecated line NSV_A(KMI) = ISV
+!!      Modification   15/02/12  (Pialat/Tulet) Add SV for ForeFire scalars
 !!                     03/2013   (C.Lac) add supersaturation as 
 !!                               the 4th C2R2 scalar variable
 !! 
@@ -76,6 +77,10 @@ USE MODD_DYN_n,     ONLY : LHORELAX_SV,LHORELAX_SVC2R2,LHORELAX_SVC1R3, &
                           LHORELAX_SVELEC,LHORELAX_SVCHEM,LHORELAX_SVLG, &
                           LHORELAX_SVDST,LHORELAX_SVAER, LHORELAX_SVSLT, &
                           LHORELAX_SVPP,LHORELAX_SVCS, LHORELAX_SVCHIC
+#ifdef MNH_FOREFIRE
+USE MODD_DYN_n,     ONLY : LHORELAX_SVFF
+USE MODD_FOREFIRE
+#endif
 USE MODD_CONF,     ONLY : LLG, CPROGRAM
 USE MODD_LG
 USE MODD_DUST
@@ -386,6 +391,23 @@ ELSE
   NSV_PPEND_A(KMI)= 0
 END IF
 !
+#ifdef MNH_FOREFIRE
+
+! ForeFire tracers
+IF (LFOREFIRE .AND. NFFSCALARS .GT. 0) THEN
+  NSV_FF_A(KMI)    = NFFSCALARS
+  NSV_FFBEG_A(KMI) = ISV+1
+  NSV_FFEND_A(KMI) = ISV+NSV_FF_A(KMI)
+  ISV              = NSV_FFEND_A(KMI)
+ELSE
+  NSV_FF_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_FFBEG_A(KMI)= 1
+  NSV_FFEND_A(KMI)= 0
+END IF
+#endif
+!
 IF (LCONDSAMP) THEN
   NSV_CS_A(KMI)   = NCONDSAMP
   NSV_CSBEG_A(KMI)= ISV+1
@@ -438,6 +460,11 @@ LHORELAX_SV(NSV_LGBEG_A(KMI):NSV_LGEND_A(KMI))=LHORELAX_SVLG
 ! Passive pollutants  
 IF (LPASPOL) &
 LHORELAX_SV(NSV_PPBEG_A(KMI):NSV_PPEND_A(KMI))=LHORELAX_SVPP
+#ifdef MNH_FOREFIRE
+! Fire pollutants
+IF (LFOREFIRE) &
+LHORELAX_SV(NSV_FFBEG_A(KMI):NSV_FFEND_A(KMI))=LHORELAX_SVFF
+#endif
 ! Conditional sampling
 IF (LCONDSAMP) &
 LHORELAX_SV(NSV_CSBEG_A(KMI):NSV_CSEND_A(KMI))=LHORELAX_SVCS
@@ -474,7 +501,10 @@ IF ((LSALT).AND.(LDEPOS_SLT(KMI))) &
 XSVMIN(NSV_SLTDEPBEG_A(KMI):NSV_SLTDEPEND_A(KMI))=XMNH_TINY
 IF ((LORILAM).AND.(LDEPOS_AER(KMI))) &
 XSVMIN(NSV_AERDEPBEG_A(KMI):NSV_AERDEPEND_A(KMI))=XMNH_TINY
-IF (LPASPOL) XSVMIN(NSV_PPBEG_A(KMI):NSV_PPEND_A(KMI))=0.          
+IF (LPASPOL) XSVMIN(NSV_PPBEG_A(KMI):NSV_PPEND_A(KMI))=0.    
+#ifdef MNH_FOREFIRE      
+IF (LFOREFIRE) XSVMIN(NSV_FFBEG_A(KMI):NSV_FFEND_A(KMI))=0.
+#endif
 IF (LCONDSAMP) XSVMIN(NSV_CSBEG_A(KMI):NSV_CSEND_A(KMI))=0.          
 !
 !  NAME OF THE SCALAR VARIABLES IN THE DIFFERENT SV GROUPS
diff --git a/src/MNH/ini_one_wayn.f90 b/src/MNH/ini_one_wayn.f90
index a9b8e45e23482e62b95f43fe6e07a9fbdec45ae4..bad3b6c0564f899ceb0c2a177fc3307a8961b077 100644
--- a/src/MNH/ini_one_wayn.f90
+++ b/src/MNH/ini_one_wayn.f90
@@ -140,6 +140,7 @@ SUBROUTINE INI_ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT,                 &
 !!    Modification   05/2006   Remove KEPS
 !!    M. Leriche     11/2009  modify the LB*SVS for the aqueous phase chemistry
 !!                   07/2010  idem for ice phase chemical species
+!!    Bosseur & Filippi 07/2013 Adds Forefire
 !!
 !------------------------------------------------------------------------------
 !
@@ -494,6 +495,13 @@ DO JSV=1,NSV_PP_A(KMI)
   CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_PPBEG_A(KDAD)),&
        &ZTSVM(:,:,:,JSV-1+NSV_PPBEG_A(KMI)),KMI)
 END DO
+#ifdef MNH_FOREFIRE
+! ForeFire variables      
+DO JSV=1,NSV_FF_A(KMI)
+  CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_FFBEG_A(KDAD)),&
+       &ZTSVM(:,:,:,JSV-1+NSV_FFBEG_A(KMI)),KMI)
+END DO
+#endif
 !        1.4  Communication
 !
 CALL LS_FORCING_ll(KMI,IINFO_ll)
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index 011e3a461a04a0226d6f1d918b7228430d88f183..a29d8c476a349f154f9f4597a693b8e575e775af 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -158,6 +158,7 @@ END MODULE MODI_INI_SEG_n
 !!                       01/2005   add GDUST, GSALT, and GORILAM (P. Tulet)
 !!                       04/2010   add GUSECHAQ, GCH_PH (M. Leriche)
 !!                       09/2010   add GUSECHIC (M. Leriche)
+!!                       02/2012   add GFOREFIRE (Pialat/Tulet)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -226,6 +227,9 @@ LOGICAL            :: GSALT
 LOGICAL            :: GORILAM
 LOGICAL            :: GLG
 LOGICAL            :: GPASPOL
+#ifdef MNH_FOREFIRE
+LOGICAL            :: GFOREFIRE
+#endif
 LOGICAL            :: GCONDSAMP
                                                   ! These variables
                                                   ! are used to locally store 
@@ -402,7 +406,11 @@ CALL READ_DESFM_n(KMI,YDESFM,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC,              &
                 GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,&
                 GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,      &
                 GDEPOS_DST, GORILAM,  &
-                GDEPOS_AER, GLG, GPASPOL, GCONDSAMP, IRIMX,IRIMY,ISV,       &
+                GDEPOS_AER, GLG, GPASPOL, &
+#ifdef MNH_FOREFIRE
+                GFOREFIRE, &
+#endif
+                GCONDSAMP, IRIMX,IRIMY,ISV,       &
                 YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS   )
 !
 !
@@ -418,7 +426,11 @@ CALL READ_EXSEG_n(KMI,YEXSEG,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC,              &
                 GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,         &
                 GUSECHAQ,GUSECHIC,GCH_PH,                                   &
                 GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,GDEPOS_DST,           &
-                GORILAM,GDEPOS_AER,GLG,GPASPOL, GCONDSAMP, IRIMX,IRIMY,ISV, &
+                GORILAM,GDEPOS_AER,GLG,GPASPOL, &
+#ifdef MNH_FOREFIRE
+                GFOREFIRE, &
+#endif
+                GCONDSAMP, IRIMX,IRIMY,ISV, &
                 YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS,  &
                 PTSTEP_ALL,CSTORAGE_TYPE,CINIFILEPGD_n                      )
 !
diff --git a/src/MNH/ls_coupling.f90 b/src/MNH/ls_coupling.f90
index f84826d7fbb5addd156d7b7fbe21b64948c7051d..a7cb0438fccb5ad2f2be35818dde616909b6811c 100644
--- a/src/MNH/ls_coupling.f90
+++ b/src/MNH/ls_coupling.f90
@@ -176,6 +176,7 @@ END MODULE MODI_LS_COUPLING
 !!                   22/09/98   (Ducrocq) //,  and introduce INI_LS and INI_LB
 !!                   01/2004    (Masson) removes SST forcing (surface externalization)
 !!                   05/2006    Remove KEPS
+!!                   2/2014     (escobar) add paspol for Forefire
 !! 
 !------------------------------------------------------------------------------
 !
@@ -187,6 +188,9 @@ USE MODD_CTURB
 USE MODD_DYN
 USE MODD_LUNIT_n
 USE MODD_NSV
+#ifdef MNH_FOREFIRE
+USE MODD_PASPOL
+#endif
 USE MODD_CH_MNHC_n
 !
 USE MODE_FMREAD
@@ -326,6 +330,9 @@ GLSOURCE=.TRUE.
 !IF ( LUSECHEM .AND. (.NOT. OCH_INIT_FIELD) ) &
 !    YGETSVM(NSV_CHEMBEG: NSV_CHEMEND) = 'INIT'
 !IF (HCONF == 'RESTA')  THEN
+#ifdef MNH_FOREFIRE
+!   IF (LPASPOL) YGETSVM(NSV_PPBEG: NSV_PPEND) = 'INIT'
+#endif
 !   IF (NSV_USER /= 0) YGETSVM(1/NSV_USER) = 'INIT'
 !   IF (NSV_C2R2 /= 0) YGETSVM(NSV_C2R2BEG: NSV_C2R2END) = 'INIT'
 !   IF (NSV_C1R3 /= 0) YGETSVM(NSV_C1R3BEG: NSV_C1R3END) = 'INIT'
@@ -338,6 +345,9 @@ GLSOURCE=.TRUE.
 !   IF (NSV_SLTDEP /= 0) YGETSVM(NSV_SLTDEPBEG: NSV_SLTDEPEND) = 'INIT'
 !   IF (NSV_PP   /= 0) YGETSVM(NSV_PPBEG: NSV_PPEND) = 'INIT'
 !   IF (NSV_CS   /= 0) YGETSVM(NSV_CSBEG: NSV_CSEND) = 'INIT'
+#ifdef MNH_FOREFIRE
+!   IF (NSV_FF   /= 0) YGETSVM(NSV_FFBEG: NSV_FFEND) = 'INIT'
+#endif
 !END IF
 !
 CALL INI_LB(CCPLFILE(NCPL_CUR),HLUOUT,GLSOURCE,KSV,                   &
diff --git a/src/MNH/modd_dynn.f90 b/src/MNH/modd_dynn.f90
index aa00d662bc46fe55f627da474ba6a4d1d157b461..d89a60115879accc53befc512267e6760ec11fba 100644
--- a/src/MNH/modd_dynn.f90
+++ b/src/MNH/modd_dynn.f90
@@ -132,6 +132,9 @@ TYPE DYN_t
   LOGICAL :: LHORELAX_SVSLT
   LOGICAL :: LHORELAX_SVAER
   LOGICAL :: LHORELAX_SVPP 
+#ifdef MNH_FOREFIRE
+  LOGICAL :: LHORELAX_SVFF
+#endif
   LOGICAL :: LHORELAX_SVCS 
   LOGICAL, DIMENSION(:),POINTER :: LHORELAX_SV =>NULL()
 !
@@ -217,6 +220,9 @@ LOGICAL, POINTER :: LHORELAX_SVDST=>NULL()
 LOGICAL, POINTER :: LHORELAX_SVSLT=>NULL()
 LOGICAL, POINTER :: LHORELAX_SVAER=>NULL()
 LOGICAL, POINTER :: LHORELAX_SVPP=>NULL()
+#ifdef MNH_FOREFIRE
+LOGICAL, POINTER :: LHORELAX_SVFF=>NULL()
+#endif
 LOGICAL, POINTER :: LHORELAX_SVCS=>NULL()
 LOGICAL, DIMENSION(:), POINTER :: LHORELAX_SV=>NULL()
 REAL, POINTER :: XRIMKMAX=>NULL()
@@ -320,6 +326,9 @@ LHORELAX_SVDST=>DYN_MODEL(KTO)%LHORELAX_SVDST
 LHORELAX_SVSLT=>DYN_MODEL(KTO)%LHORELAX_SVSLT
 LHORELAX_SVAER=>DYN_MODEL(KTO)%LHORELAX_SVAER
 LHORELAX_SVPP=>DYN_MODEL(KTO)%LHORELAX_SVPP
+#ifdef MNH_FOREFIRE
+LHORELAX_SVFF=>DYN_MODEL(KTO)%LHORELAX_SVFF
+#endif
 LHORELAX_SVCS=>DYN_MODEL(KTO)%LHORELAX_SVCS
 LHORELAX_SV=>DYN_MODEL(KTO)%LHORELAX_SV
 XRIMKMAX=>DYN_MODEL(KTO)%XRIMKMAX
diff --git a/src/MNH/modd_nsv.f90 b/src/MNH/modd_nsv.f90
index 27a9dfa01a3e9dc40d773e70fa44c7d293a2a70a..2c0fc558f6b5456f1b392124699eb1f38b49ca7e 100644
--- a/src/MNH/modd_nsv.f90
+++ b/src/MNH/modd_nsv.f90
@@ -24,6 +24,7 @@
 !!       M. Leriche    12/04/07 add aqueous chemistry
 !!       M. Leriche    08/07/10 add ice phase chemistry
 !!       C.Lac         07/11    add conditional sampling
+!!       Pialat/Tulet  15/02/12 add ForeFire
 !!
 !-------------------------------------------------------------------------------
 !
@@ -112,7 +113,12 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_PPEND_A = 0 ! NSV_PPBEG_A...NSV_PPEND_A
 INTEGER,DIMENSION(JPMODELMAX)::NSV_CS_A = 0    ! number of condit.samplings
 INTEGER,DIMENSION(JPMODELMAX)::NSV_CSBEG_A = 0 ! with indices in the range :
 INTEGER,DIMENSION(JPMODELMAX)::NSV_CSEND_A = 0 ! NSV_CSBEG_A...NSV_CSEND_A
-
+!
+#ifdef MNH_FOREFIRE
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FF_A = 0    ! number of ForeFire scalar variables
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FFBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FFEND_A = 0 ! NSV_FFBEG_A...NSV_FFEND_A
+#endif
 !
 !###############################################################################
 !
@@ -190,5 +196,11 @@ INTEGER :: NSV_PPEND = 0 ! NSV_PPBEG...NSV_PPEND
 INTEGER :: NSV_CS    = 0 ! number of condit.samplings         
 INTEGER :: NSV_CSBEG = 0 ! with indices in the range :
 INTEGER :: NSV_CSEND = 0 ! NSV_CSBEG...NSV_CSEND
+!
+#ifdef MNH_FOREFIRE
+INTEGER :: NSV_FF    = 0 ! number of ForeFire scalar variables
+INTEGER :: NSV_FFBEG = 0 ! with indices in the range :
+INTEGER :: NSV_FFEND = 0 ! NSV_FFBEG...NSV_FFEND
+#endif
 
 END MODULE MODD_NSV
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index db9bc865e819029c973c3d0326c6def5691974c8..1337404880a189ffb79ca096ca3fa411d22e37be 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -1167,6 +1167,11 @@ END DO
 DO JSV = NSV_PPBEG,NSV_PPEND
   XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
 END DO
+#ifdef MNH_FOREFIRE
+DO JSV = NSV_FFBEG,NSV_FFEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+#endif
 DO JSV = NSV_CSBEG,NSV_CSEND
   XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
 END DO
@@ -1207,7 +1212,11 @@ IF(LVE_RELAX .OR. LVE_RELAX_GRD .OR. LHORELAX_UVWTH .OR. LHORELAX_RV .OR.&
                    LHORELAX_SVELEC,LHORELAX_SVLG,                      &
                    LHORELAX_SVCHEM,LHORELAX_SVCHIC,LHORELAX_SVAER,     &
                    LHORELAX_SVDST,LHORELAX_SVSLT,LHORELAX_SVPP,        &
-                   LHORELAX_SVCS, KTCOUNT,NRR,NSV,XTSTEP,XRHODJ,       &
+                   LHORELAX_SVCS,                                      &
+#ifdef MNH_FOREFIRE
+                   LHORELAX_SVFF,                                      &
+#endif
+                   KTCOUNT,NRR,NSV,XTSTEP,XRHODJ,                      &
                    XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET,              &
                    XLSUM, XLSVM, XLSWM, XLSTHM,                        &
                    XLBXUM, XLBXVM, XLBXWM, XLBXTHM,                    &
@@ -1378,6 +1387,13 @@ IF (.NOT. LSTEADYLS) THEN
         XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
       ENDDO
       !
+#ifdef MNH_FOREFIRE
+      DO JSV=NSV_FFBEG,NSV_FFEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+#endif
       DO JSV=NSV_CSBEG,NSV_CSEND
         XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
         XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
diff --git a/src/MNH/modn_dynn.f90 b/src/MNH/modn_dynn.f90
index d5d5756d96ff9bbd11f19c06e0e7589beb0b1eee..f43e058b1bbeb5d37889dbf368c29d0a03370e9a 100644
--- a/src/MNH/modn_dynn.f90
+++ b/src/MNH/modn_dynn.f90
@@ -54,6 +54,7 @@
 !!      Modifications 16/07/10  (Leriche) add LHORELAX_SVCHIC 
 !!      Modifications 09/06/11  (Barthe)  add LHORELAX_SVELEC in namelist
 !!      Modifications 15/06/11  (Lac)     add LHORELAX for conditional sampling
+!!      Modifications 12/02/12  (Pialat/Tulet) add LHORELAX_SVFF for ForeFire scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -84,6 +85,9 @@ USE MODD_DYN_n, ONLY : &
          LHORELAX_SVCHIC_n => LHORELAX_SVCHIC, &
          LHORELAX_SVLG_n => LHORELAX_SVLG, &
          LHORELAX_SVPP_n => LHORELAX_SVPP, &
+#ifdef MNH_FOREFIRE
+         LHORELAX_SVFF_n => LHORELAX_SVFF, &
+#endif
          LHORELAX_SVCS_n => LHORELAX_SVCS, &
          LHORELAX_SVDST_n => LHORELAX_SVDST, &
          LHORELAX_SVSLT_n => LHORELAX_SVSLT, &
@@ -123,6 +127,9 @@ LOGICAL, SAVE  :: LHORELAX_SVCHEM
 LOGICAL, SAVE  :: LHORELAX_SVCHIC
 LOGICAL, SAVE  :: LHORELAX_SVLG
 LOGICAL, SAVE  :: LHORELAX_SVPP
+#ifdef MNH_FOREFIRE
+LOGICAL, SAVE  :: LHORELAX_SVFF
+#endif
 LOGICAL, SAVE  :: LHORELAX_SVCS
 LOGICAL, SAVE  :: LHORELAX_SVDST
 LOGICAL, SAVE  :: LHORELAX_SVSLT
@@ -144,6 +151,9 @@ NAMELIST/NAM_DYNn/XTSTEP,CPRESOPT,NITR,LITRADJ,LRES,XRES,XRELAX,LHORELAX_UVWTH,
                   LHORELAX_SVCHEM, LHORELAX_SVCHIC, LHORELAX_SVLG, LHORELAX_SVDST, &
                   LHORELAX_SVSLT, LHORELAX_SVAER, LHORELAX_SVPP, &
                   LHORELAX_SVCS, LHORELAX_SV,LVE_RELAX,LVE_RELAX_GRD,&
+#ifdef MNH_FOREFIRE
+                  LHORELAX_SVFF, &
+#endif
                   NRIMX,NRIMY,XRIMKMAX,XT4DIFU, &
                   XT4DIFTH,XT4DIFSV
 !
@@ -173,6 +183,9 @@ SUBROUTINE INIT_NAM_DYNn
   LHORELAX_SVELEC = LHORELAX_SVELEC_n
   LHORELAX_SVLG = LHORELAX_SVLG_n
   LHORELAX_SVPP = LHORELAX_SVPP_n
+#ifdef MNH_FOREFIRE
+  LHORELAX_SVFF = LHORELAX_SVFF_n
+#endif
   LHORELAX_SVCS = LHORELAX_SVCS_n
   LHORELAX_SVDST = LHORELAX_SVDST_n
   LHORELAX_SVSLT = LHORELAX_SVSLT_n
@@ -212,6 +225,9 @@ SUBROUTINE UPDATE_NAM_DYNn
   LHORELAX_SVELEC_n = LHORELAX_SVELEC
   LHORELAX_SVLG_n = LHORELAX_SVLG
   LHORELAX_SVPP_n = LHORELAX_SVPP
+#ifdef MNH_FOREFIRE
+  LHORELAX_SVFF_n = LHORELAX_SVFF
+#endif
   LHORELAX_SVCS_n = LHORELAX_SVCS
   LHORELAX_SVDST_n = LHORELAX_SVDST
   LHORELAX_SVSLT_n = LHORELAX_SVSLT
diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90
index 8af8c96ada361fd7c5768c3892266d8c23afcd46..1160f2e863430d270c1a01063ed67e2d3c61c894 100644
--- a/src/MNH/one_wayn.f90
+++ b/src/MNH/one_wayn.f90
@@ -188,6 +188,7 @@ SUBROUTINE ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT,                     &
 !!                   05/2006  Remove EPS
 !!    M. Leriche     11/2009  modify the LB*SVS for the aqueous phase chemistry
 !!                   07/2010  idem for ice phase chemical species
+!!    Bosseur & Filippi 07/2013 Adds Forefire
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -572,6 +573,16 @@ DO JSV=1,NSV_PP_A(KMI)
   CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_PPBEG_A(KDAD)),&
        &ZTSVT(:,:,:,JSV-1+NSV_PPBEG_A(KMI)),KMI)
 END DO
+#ifdef MNH_FOREFIRE
+
+!
+! ForeFire variables     
+!
+DO JSV=1,NSV_FF_A(KMI)
+  CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_FFBEG_A(KDAD)),&
+       &ZTSVT(:,:,:,JSV-1+NSV_FFBEG_A(KMI)),KMI)
+END DO
+#endif
 !
 ! Conditional sampling  
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 2147c3269a8ba0f87bfda8377711ed0962eaa86a..97ba53e1cc0841baf5657256ce4116bfe2b668a3 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -372,6 +372,7 @@
 !!                  Aou   09, 2005 (D.Barbary) add CDADATMFILE CDADBOGFILE
 !!                   May   2006    Remove KEPS
 !!                  Mar   2012    Add NAM_NCOUT for netcdf output
+!!                  July  2013     (Bosseur & Filippi) Adds Forefire
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -769,6 +770,9 @@ LHORELAX_SVDST  = (NSV_DST > 0)
 LHORELAX_SVSLT  = (NSV_SLT > 0)
 LHORELAX_SVAER  = (NSV_AER > 0)
 LHORELAX_SVPP   = (NSV_PP > 0)
+#ifdef MNH_FOREFIRE
+LHORELAX_SVFF   = (NSV_FF > 0)
+#endif
 LHORELAX_SVCS   = (NSV_CS > 0)
 
 LHORELAX_SVLG   = .FALSE.
diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index 084cbaf77170a43efb904b8156cd0e6cdc9d4a20..953cd209ceceac75bc938e3f8a10c056bc298963 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -17,7 +17,12 @@ INTERFACE
                    OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH,             &
                    OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT,       &
                    ODEPOS_SLT,ODUST,ODEPOS_DST,                                  &
-                   OORILAM,ODEPOS_AER,OLG,OPASPOL,OCONDSAMP,KRIMX,KRIMY,KSV_USER,&
+                   OORILAM,ODEPOS_AER,OLG,OPASPOL,                               &
+#ifdef MNH_FOREFIRE
+                   OFOREFIRE,                                                    &
+#endif
+                   OCONDSAMP,                                                    &
+                   KRIMX,KRIMY,KSV_USER,                                         &
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,HEQNSYS     )
 USE MODD_PARAMETERS
 INTEGER,            INTENT(IN)  :: KMI    ! Model index
@@ -42,6 +47,9 @@ LOGICAL,            INTENT(OUT) :: OLG      ! lagrangian flag
 LOGICAL,            INTENT(OUT) :: OSALT    ! Sea Salt flag
 LOGICAL,            INTENT(OUT) :: ODUST    ! Dust flag
 LOGICAL,            INTENT(OUT) :: OPASPOL  ! Passive pollutant flag
+#ifdef MNH_FOREFIRE
+LOGICAL,            INTENT(OUT) :: OFOREFIRE! ForeFire flag
+#endif
 LOGICAL,            INTENT(OUT) :: OCONDSAMP! Conditional sampling flag
 LOGICAL,            INTENT(OUT) :: OORILAM  ! Orilam flag
 LOGICAL,DIMENSION(JPMODELMAX),INTENT(OUT) :: ODEPOS_DST    ! Dust Wet Deposition flag
@@ -71,7 +79,12 @@ END MODULE MODI_READ_DESFM_n
                    OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH,             &
                    OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT,       &
                    ODEPOS_SLT,ODUST,ODEPOS_DST,                                  &
-                   OORILAM,ODEPOS_AER,OLG,OPASPOL,OCONDSAMP,KRIMX,KRIMY,KSV_USER,&
+                   OORILAM,ODEPOS_AER,OLG,OPASPOL,                               &
+#ifdef MNH_FOREFIRE
+                   OFOREFIRE,                                                    &
+#endif
+                   OCONDSAMP,                                                    &
+                   KRIMX,KRIMY,KSV_USER,                                         &
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,HEQNSYS     )
 !     #########################################################################
 !
@@ -171,6 +184,7 @@ END MODULE MODI_READ_DESFM_n
 !!      Modification   03/2005   (Tulet)  add dust, aerosols
 !!      Modification   03/2006   (O.Geoffroy) Add KHKO scheme
 !!      Modification   04/2010   (M. Leriche) Add aqueous + ice chemistry
+!!      Modification   07/2013   (Bosseur & Filippi) Adds Forefire
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -209,6 +223,9 @@ USE MODN_CH_ORILAM
 USE MODN_DUST
 USE MODN_SALT
 USE MODN_PASPOL
+#ifdef MNH_FOREFIRE
+USE MODN_FOREFIRE
+#endif
 USE MODN_CONDSAMP
 USE MODN_LATZ_EDFLX
 USE MODN_2D_FRC
@@ -258,6 +275,9 @@ CHARACTER (LEN=4),  INTENT(OUT) :: HELEC  ! Kind of electrical scheme
 CHARACTER (LEN=*),  INTENT(OUT) :: HEQNSYS! type of equations' system
 LOGICAL,            INTENT(OUT) :: OSALT    ! Sea Salt flag
 LOGICAL,            INTENT(OUT) :: OPASPOL  ! Passive pollutant flag
+#ifdef MNH_FOREFIRE
+LOGICAL,            INTENT(OUT) :: OFOREFIRE ! ForeFire flag
+#endif
 LOGICAL,            INTENT(OUT) :: OCONDSAMP! Conditional sampling flag
 LOGICAL,            INTENT(OUT) :: ODUST    ! Dust flag
 LOGICAL,            INTENT(OUT) :: OORILAM  ! Dust flag
@@ -440,6 +460,10 @@ IF (KMI == 1) THEN
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT)
   CALL POSNAM(ILUDES,'NAM_PASPOL',GFOUND,ILUOUT)
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PASPOL)
+#ifdef MNH_FOREFIRE
+  CALL POSNAM(ILUDES,'NAM_FOREFIRE',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FOREFIRE)
+#endif
   CALL POSNAM(ILUDES,'NAM_CONDSAMP',GFOUND,ILUOUT)
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CONDSAMP)
   CALL POSNAM(ILUDES,'NAM_2D_FRC',GFOUND,ILUOUT)
@@ -478,6 +502,9 @@ OSALT    = LSALT
 OORILAM  = LORILAM
 OLG      = LLG
 OPASPOL  = LPASPOL
+#ifdef MNH_FOREFIRE
+OFOREFIRE  = LFOREFIRE
+#endif
 OCONDSAMP= LCONDSAMP
 KRIMX  = NRIMX
 KRIMY  = NRIMY
@@ -619,6 +646,11 @@ IF (NVERB >= 10) THEN
     WRITE(UNIT=ILUOUT,FMT="('************ PASSIVE POLLUTANT  ***************')")
     WRITE(UNIT=ILUOUT,NML=NAM_PASPOL)
 !
+#ifdef MNH_FOREFIRE
+	WRITE(UNIT=ILUOUT,FMT="('************ FOREFIRE  ***************')")
+	WRITE(UNIT=ILUOUT,NML=NAM_FOREFIRE)
+!
+#endif		
     WRITE(UNIT=ILUOUT,FMT="('************ CONDITIONAL SAMPLING *************')")
     WRITE(UNIT=ILUOUT,NML=NAM_CONDSAMP)
 !
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index 9be08b17f017d9999bec1958a110d3894ceef28d..5690d0ecf6b9d3b9e9e8f0c0dddba89e76429300 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -18,7 +18,12 @@ INTERFACE
                    OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH,               &
                    OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT,         &
                    ODEPOS_SLT, ODUST,ODEPOS_DST,                                   &
-                   OORILAM,ODEPOS_AER, OLG,OPASPOL,OCONDSAMP,KRIMX,KRIMY, KSV_USER,&   
+                   OORILAM,ODEPOS_AER, OLG,OPASPOL,                                &
+#ifdef MNH_FOREFIRE
+                   OFOREFIRE,                                                      &
+#endif
+                   OCONDSAMP,                                                      &
+                   KRIMX,KRIMY, KSV_USER,                                          &
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,              &
                    HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD                    )
 INTEGER,            INTENT(IN) :: KMI    ! Model index
@@ -44,6 +49,9 @@ LOGICAL,DIMENSION(:), INTENT(IN)  :: ODEPOS_AER  ! Orilam wet deposition FLAG in
 LOGICAL,            INTENT(IN) :: OSALT          ! Sea Salt FLAG in FMFILE
 LOGICAL,            INTENT(IN) :: OORILAM        ! Orilam FLAG in FMFILE
 LOGICAL,            INTENT(IN) :: OPASPOL        ! Passive pollutant FLAG in FMFILE
+#ifdef MNH_FOREFIRE
+LOGICAL,            INTENT(IN) :: OFOREFIRE      ! ForeFire FLAG in FMFILE
+#endif
 LOGICAL,            INTENT(IN) :: OCONDSAMP      ! Conditional sampling FLAG in FMFILE
 
 LOGICAL,            INTENT(IN) :: OLG            ! lagrangian FLAG in FMFILE
@@ -77,7 +85,12 @@ END MODULE MODI_READ_EXSEG_n
                    OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH,               &
                    OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT,         &
                    ODEPOS_SLT, ODUST,ODEPOS_DST,                                   &
-                   OORILAM,ODEPOS_AER, OLG,OPASPOL,OCONDSAMP,KRIMX,KRIMY, KSV_USER,&   
+                   OORILAM,ODEPOS_AER, OLG,OPASPOL,                                &
+#ifdef MNH_FOREFIRE
+                   OFOREFIRE,                                                      &
+#endif
+                   OCONDSAMP,                                                      &
+                   KRIMX,KRIMY, KSV_USER,                                          &
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,              &
                    HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD                    )
 !     #########################################################################
@@ -258,6 +271,7 @@ END MODULE MODI_READ_EXSEG_n
 !!      Modification   09/2011   (J.Escobar) re-add 'ZRESI' choose
 !!      Modification   12/2011   (C.Lac) Adaptation to FIT temporal scheme 
 !!      Modification   12/2012   (S.Bielli) add NAM_NCOUT for netcdf output
+!!      Modification   02/2012   (Pialat/Tulet) add ForeFire
 !!------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -323,6 +337,10 @@ USE MODD_CH_AEROSOL
 USE MODD_DUST
 USE MODD_SALT
 USE MODD_PASPOL
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+USE MODN_FOREFIRE
+#endif
 USE MODD_CONDSAMP
 USE MODN_DUST
 USE MODN_SALT
@@ -360,6 +378,9 @@ LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_AER   ! Orilam wet deposition FLAG in
 LOGICAL,            INTENT(IN) :: OSALT          ! Sea Salt FLAG in FMFILE
 LOGICAL,            INTENT(IN) :: OORILAM        ! Orilam FLAG in FMFILE
 LOGICAL,            INTENT(IN) :: OPASPOL        ! Passive pollutant FLAG in FMFILE
+#ifdef MNH_FOREFIRE
+LOGICAL,            INTENT(IN) :: OFOREFIRE      ! ForeFire FLAG in FMFILE
+#endif
 LOGICAL,            INTENT(IN) :: OCONDSAMP      ! Conditional sampling FLAG in FMFILE
 
 LOGICAL,            INTENT(IN) :: OLG            ! lagrangian FLAG in FMFILE
@@ -517,6 +538,10 @@ IF (KMI == 1) THEN
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SALT)
   CALL POSNAM(ILUSEG,'NAM_PASPOL',GFOUND,ILUOUT)
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PASPOL)
+#ifdef MNH_FOREFIRE
+  CALL POSNAM(ILUSEG,'NAM_FOREFIRE',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FOREFIRE)
+#endif
   CALL POSNAM(ILUSEG,'NAM_CONDSAMP',GFOUND,ILUOUT)
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONDSAMP)
   CALL POSNAM(ILUSEG,'NAM_DRAGTREE',GFOUND,ILUOUT)
@@ -1639,6 +1664,27 @@ IF (LPASPOL) THEN
   END IF
 END IF
 !
+#ifdef MNH_FOREFIRE
+! ForeFire
+!
+IF (LFOREFIRE) THEN
+  IF (OFOREFIRE) THEN
+!!$    CGETSVM(NSV_FFBEG:NSV_FFEND)='READ'
+    CGETSVT(NSV_FFBEG:NSV_FFEND)='READ'
+    IF(HSTORAGE_TYPE=='TT') THEN
+      CGETSVT(NSV_FFBEG:NSV_FFEND)='INIT'
+!!$      CGETSVM(NSV_FFBEG:NSV_FFEND)='INIT'
+    END IF
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO FOREFIRE SCALAR VARIABLES IN INITIAL FMFILE",/,&
+                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
+!!$    CGETSVM(NSV_FFBEG:NSV_FFEND)='INIT'
+    CGETSVT(NSV_FFBEG:NSV_FFEND)='INIT'
+  END IF
+END IF
+#endif
+!
 ! Conditional sampling case
 !
 IF (LCONDSAMP) THEN
@@ -2115,7 +2161,14 @@ IF (.NOT. LPASPOL .AND. LHORELAX_SVPP) THEN
   WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX PASSIVE POLLUTANT FIELD BUT IT DOES NOT EXIST.'
   WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVPP=FALSE'
 END IF
-
+#ifdef MNH_FOREFIRE
+IF (.NOT. LFOREFIRE .AND. LHORELAX_SVFF) THEN
+  LHORELAX_SVFF=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX FOREFIRE FLUXES BUT THEY DO NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVFF=FALSE'
+END IF
+#endif
 IF (.NOT. LCONDSAMP .AND. LHORELAX_SVCS) THEN
   LHORELAX_SVCS=.FALSE.
   WRITE(UNIT=ILUOUT,FMT=9002) KMI
@@ -2161,6 +2214,9 @@ IF ( (.NOT. LHORELAX_UVWTH) .AND. (.NOT.(ANY(LHORELAX_SV))) .AND.  &
      (.NOT. LHORELAX_SVELEC).AND. (.NOT. LHORELAX_SVCHEM)   .AND.  &
      (.NOT. LHORELAX_SVLG)  .AND. (.NOT. LHORELAX_SVPP)     .AND.  &
      (.NOT. LHORELAX_SVCS)  .AND.                                  &
+#ifdef MNH_FOREFIRE
+     (.NOT. LHORELAX_SVFF)  .AND.                                  &
+#endif
      (.NOT. LHORELAX_RV)    .AND. (.NOT. LHORELAX_RC)       .AND.  &
      (.NOT. LHORELAX_RR)    .AND. (.NOT. LHORELAX_RI)       .AND.  &
      (.NOT. LHORELAX_RS)    .AND. (.NOT. LHORELAX_RG)       .AND.  &
@@ -2176,6 +2232,9 @@ END IF
 !
 IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP   .OR.  &
      LHORELAX_SVCS   .OR.                       &
+#ifdef MNH_FOREFIRE
+     LHORELAX_SVFF   .OR.                       &
+#endif
      LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR.  &
      LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR.  &
      LHORELAX_SVLG   .OR. ANY(LHORELAX_SV) .OR. &
@@ -2196,6 +2255,9 @@ IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP   .OR.  &
   WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHIC=",LHORELAX_SVCHIC
   WRITE(ILUOUT,FMT=*) "LHORELAX_SVLG=",LHORELAX_SVLG
   WRITE(ILUOUT,FMT=*) "LHORELAX_SVPP=",LHORELAX_SVPP
+#ifdef MNH_FOREFIRE
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVFF=",LHORELAX_SVFF
+#endif
   WRITE(ILUOUT,FMT=*) "LHORELAX_SVCS=",LHORELAX_SVCS
   WRITE(ILUOUT,FMT=*) "LHORELAX_SV=",LHORELAX_SV
   WRITE(ILUOUT,FMT=*) "LHORELAX_RV=",LHORELAX_RV
@@ -2217,6 +2279,9 @@ END IF
 ! 
 IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP  .OR.   &
      LHORELAX_SVCS   .OR.                       &
+#ifdef MNH_FOREFIRE
+     LHORELAX_SVFF   .OR.                       &
+#endif
      LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR.  &
      LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR.  &
      LHORELAX_SVLG   .OR. ANY(LHORELAX_SV) .OR. &
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index 687aad828505bd717266232d8d62b3e9e105eb8c..8c70c5322867fbce103e51556cc72145865d8edf 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -223,7 +223,8 @@ END MODULE MODI_READ_FIELD
 !!          M.Tomasini, 
 !!          P. Peyrille   06/12   2D west african monsoon : add reading of ADV forcing and addy fluxes 
 !!          C.Lac       03/13     add prognostic supersaturation for C2R2/KHKO
-!-------------------------------------------------------------------------------
+!!          Bosseur & Filippi 07/13 Adds Forefire
+!!-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
@@ -238,6 +239,9 @@ USE MODD_NSV
 USE MODD_DUST
 USE MODD_SALT
 USE MODD_PASPOL
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+#endif
 USE MODD_CH_AEROSOL
 USE MODD_CH_MNHC_n, ONLY : XCH_PHINIT
 !
@@ -783,6 +787,24 @@ DO JSV = NSV_PPBEG,NSV_PPEND
   END SELECT
 END DO
 !
+#ifdef MNH_FOREFIRE
+DO JSV = NSV_FFBEG,NSV_FFEND
+  SELECT CASE(HGETSVT(JSV))
+  CASE ('READ')
+    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
+    CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,  &
+         YCOMMENT,IRESP)
+    IF (IRESP == 0) THEN
+       PSVT(:,:,:,JSV) = Z3D(:,:,:)
+    ELSE
+       PSVT(:,:,:,JSV) = 0.
+    END IF
+  CASE ('INIT')
+    PSVT(:,:,:,JSV) = 0.
+  END SELECT
+END DO
+#endif
+!
 DO JSV = NSV_CSBEG,NSV_CSEND
   SELECT CASE(HGETSVT(JSV))
   CASE ('READ')
diff --git a/src/MNH/relaxation.f90 b/src/MNH/relaxation.f90
index 644ae46a70a309648af53627c0aa85e65b107113..687de0f0260c817ccfd85c9473bcc02ce42a222f 100644
--- a/src/MNH/relaxation.f90
+++ b/src/MNH/relaxation.f90
@@ -17,6 +17,9 @@ INTERFACE
                              OHORELAX_SVCHEM,OHORELAX_SVCHIC, OHORELAX_SVAER,  &
                              OHORELAX_SVDST, OHORELAX_SVSLT, OHORELAX_SVPP,    &
                              OHORELAX_SVCS,                                    &
+#ifdef MNH_FOREFIRE
+                             OHORELAX_SVFF,                                    &
+#endif
                              KTCOUNT,KRR,KSV,PTSTEP,PRHODJ,                    &
                              PUT, PVT, PWT, PTHT, PRT, PSVT, PTKET,            &
                              PLSUM, PLSVM, PLSWM, PLSTHM,                      &
@@ -73,7 +76,11 @@ LOGICAL,             INTENT(IN):: OHORELAX_SVDST  ! switch for the
 LOGICAL,             INTENT(IN):: OHORELAX_SVSLT  ! switch for the 
                        ! horizontal relaxation for slt variables
 LOGICAL,             INTENT(IN):: OHORELAX_SVPP   ! switch for the 
-                       ! horizontal relaxation for passive scalar 
+                       ! horizontal relaxation for passive scalar
+#ifdef MNH_FOREFIRE
+LOGICAL,             INTENT(IN):: OHORELAX_SVFF   ! switch for the 
+                       ! horizontal relaxation for ForeFire variables 
+#endif
 LOGICAL,             INTENT(IN):: OHORELAX_SVCS   ! switch for the 
                        ! horizontal relaxation for conditional sampling
 INTEGER,                  INTENT(IN)    :: KTCOUNT! Temporal loop counter       
@@ -150,6 +157,9 @@ END MODULE MODI_RELAXATION
                              OHORELAX_SVCHEM,OHORELAX_SVCHIC, OHORELAX_SVAER,  &
                              OHORELAX_SVDST, OHORELAX_SVSLT, OHORELAX_SVPP,    &
                              OHORELAX_SVCS,                                    &
+#ifdef MNH_FOREFIRE
+                             OHORELAX_SVFF,                                    &
+#endif
                              KTCOUNT,KRR,KSV,PTSTEP,PRHODJ,                    &
                              PUT, PVT, PWT, PTHT, PRT, PSVT, PTKET,            &
                              PLSUM, PLSVM, PLSWM, PLSTHM,                      &
@@ -308,7 +318,11 @@ LOGICAL,             INTENT(IN):: OHORELAX_SVDST  ! switch for the
 LOGICAL,             INTENT(IN):: OHORELAX_SVSLT  ! switch for the 
                        ! horizontal relaxation for slt variables
 LOGICAL,             INTENT(IN):: OHORELAX_SVPP   ! switch for the 
-                       ! horizontal relaxation for passive scalar 
+                       ! horizontal relaxation for passive scalar
+#ifdef MNH_FOREFIRE 
+LOGICAL,             INTENT(IN):: OHORELAX_SVFF   ! switch for the 
+                       ! horizontal relaxation for ForeFire variables 
+#endif
 LOGICAL,             INTENT(IN):: OHORELAX_SVCS   ! switch for the 
                        ! horizontal relaxation for conditional sampling
 INTEGER,                  INTENT(IN)    :: KTCOUNT! Temporal loop counter       
@@ -400,7 +414,11 @@ REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZKHU,ZKHV,ZKHW,       &
 LOGICAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: GMASK3D_RELAX ! 3D
                              ! mask for hor. relax.
 LOGICAL, DIMENSION(7) :: GHORELAXR ! local array of logical
+#ifdef MNH_FOREFIRE
+LOGICAL, DIMENSION(12) :: GHORELAXSV! local array of logical
+#else
 LOGICAL, DIMENSION(11) :: GHORELAXSV! local array of logical
+#endif
 !  
 !-------------------------------------------------------------------------------
 !
@@ -437,6 +455,9 @@ GHORELAXSV(8) = OHORELAX_SVSLT
 GHORELAXSV(9) = OHORELAX_SVPP
 GHORELAXSV(10) = OHORELAX_SVCS
 GHORELAXSV(11) = OHORELAX_SVCHIC
+#ifdef MNH_FOREFIRE
+GHORELAXSV(12) = OHORELAX_SVFF
+#endif
 !-------------------------------------------------------------------------------
 !
 !*       2.     RELAXATION IN THE UPPER LAYERS
diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90
index ef9077d54bd94e8c98e45424fc376e961736c396..eeed36994984653c1faa6fc83b8f48a54f0085a9 100644
--- a/src/MNH/spawn_field2.f90
+++ b/src/MNH/spawn_field2.f90
@@ -137,6 +137,9 @@ END MODULE MODI_SPAWN_FIELD2
 !!      Modification 01/02/01 (D.Gazen)  add module MODD_NSV for NSV variable
 !!      Modification 07/07/05 (D.Barbary) spawn with 2 input files (father+son1)
 !!      Modification 05/06                Remove EPS, Clark and Farley
+!!      Modification 06/12  (M.Tomasini)  Interpolation of turbulent fluxes (EDDY_FLUX)
+!!                                        for 2D west african monsoon
+!!      Modification 07/13  (Bosseur & Filippi) Adds Forefire
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -651,6 +654,18 @@ IF (PRESENT(HSONFILE)) THEN
                   YCOMMENT,IRESP)
       IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     END DO
+#ifdef MNH_FOREFIRE
+    DO JSV = NSV_FFBEG,NSV_FFEND     ! ForeFire variables
+      WRITE(YRECFM,'(A3,I3.3)')'SVM',JSV
+      CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,  &
+                  YCOMMENT,IRESP)
+      IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
+      WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
+      CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,  &
+                  YCOMMENT,IRESP)
+      IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
+    END DO
+#endif
     DO JSV = NSV_CSBEG,NSV_CSEND     ! Passive scalar variables
       WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
       CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,  &
@@ -662,6 +677,13 @@ IF (PRESENT(HSONFILE)) THEN
       CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
       IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     END DO
+#ifdef MNH_FOREFIRE
+   DO JSV = 1,NSV_FF               ! ForeFire variables
+      YRECFM='ATC'
+      CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP)
+      IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
+    END DO
+#endif
   END IF
   !
   ! Secondary pronostic variables
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index e6d6530bf228464b1d6c2f71e212cceafa15563e..73c4d213afc1c01fb10409557565ae34cbe20248 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -180,6 +180,7 @@ END MODULE MODI_SPAWN_MODEL2
 !!                             Replace DRY_MASS by TOTAL_DMASS
 !!      Modification 06/12  (M.Tomasini) Interpolation of the advective forcing (ADVFRC)
 !!                                       and of the turbulent fluxes (EDDY_FLUX)
+!!      Modification 07/13  (Bosseur & Filippi) Adds Forefire
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -608,6 +609,9 @@ IF (NSV_AER  > 0) LHORELAX_SVAER = .TRUE.
 IF (NSV_DST  > 0) LHORELAX_SVDST = .TRUE.
 IF (NSV_SLT  > 0) LHORELAX_SVSLT = .TRUE.
 IF (NSV_PP  > 0) LHORELAX_SVPP   = .TRUE.
+#ifdef MNH_FOREFIRE
+IF (NSV_FF  > 0) LHORELAX_SVFF   = .TRUE.
+#endif
 IF (NSV_CS  > 0) LHORELAX_SVCS   = .TRUE.
 LHORELAX_SVLG   = .FALSE.
 !
diff --git a/src/MNH/two_wayn.f90 b/src/MNH/two_wayn.f90
index 52bc67516a211c17067cfe3b6941001877870cb8..4be8177b61c3bde6c8c9d8b81f2389d1d3decc28 100644
--- a/src/MNH/two_wayn.f90
+++ b/src/MNH/two_wayn.f90
@@ -116,6 +116,7 @@ END MODULE MODI_TWO_WAY_n
 !!      M. Leriche   16/07/10  Add ice phase chemical species
 !!      V.Masson, C.Lac 08/10  Corrections in relaxation
 !!      J. Escobar   27/06/2011 correction for gridnesting with different SHAPE
+!!      Bosseur & Filippi 07/2013 Adds Forefire
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -604,9 +605,29 @@ DO JVAR=1,NSV_PP_A(KMI)
            &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*&
            &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_PPBEG_A(IMI))
     END DO
+  END DO 
+END DO
+END IF
+#ifdef MNH_FOREFIRE
+! ForeFire variables
+IF (NSV_FF_A(IMI) > 0) THEN
+DO JVAR=1,NSV_FF_A(KMI)
+  ZTSVM(:,:,:,JVAR-1+NSV_FFBEG_A(KMI)) = 0.
+  DO JX=1,IDXRATIO
+    DO JY=1,IDYRATIO
+      II1 = IIB+JX-1
+      II2 = IIE+JX-IDXRATIO
+      IJ1 = IJB+JY-1
+      IJ2 = IJE+JY-IDYRATIO
+      ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_FFBEG_A(KMI)) = &
+           &ZTSVM(3:IDIMX-2,3:IDIMY-2,:,JVAR-1+NSV_FFBEG_A(KMI))+&
+           &XRHODJ(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:)*&
+           &XSVT(II1:II2:IDXRATIO,IJ1:IJ2:IDYRATIO,:,JVAR-1+NSV_FFBEG_A(IMI))
+    END DO
   END DO
 END DO
 END IF
+#endif
 ! Conditional sampling variables
 IF (NSV_CS_A(IMI) > 0) THEN
 DO JVAR=1,NSV_CS_A(KMI)
@@ -1208,6 +1229,15 @@ DO JVAR=NSV_PPBEG_A(KMI),NSV_PPEND_A(KMI)
      -  ZK2W * PRHODJ(IXOR:IXEND,IYOR:IYEND,:) * (PSVM(IXOR:IXEND,IYOR:IYEND,:,JVAR) &
                  -ZSVM(IXOR:IXEND,IYOR:IYEND,:,JVAR)/ZRHODJ(IXOR:IXEND,IYOR:IYEND,:) )
 ENDDO
+#ifdef MNH_FOREFIRE
+
+! ForeFire variables
+DO JVAR=NSV_FFBEG_A(KMI),NSV_FFEND_A(KMI)
+  PRSVS(IXOR:IXEND,IYOR:IYEND,:,JVAR) = PRSVS(IXOR:IXEND,IYOR:IYEND,:,JVAR) &
+     -  ZK2W * PRHODJ(IXOR:IXEND,IYOR:IYEND,:) * (PSVM(IXOR:IXEND,IYOR:IYEND,:,JVAR) &
+                 -ZSVM(IXOR:IXEND,IYOR:IYEND,:,JVAR)/ZRHODJ(IXOR:IXEND,IYOR:IYEND,:) )
+ENDDO
+#endif
 ! Conditional sampling variables
 DO JVAR=NSV_CSBEG_A(KMI),NSV_CSEND_A(KMI)
   PRSVS(IXOR:IXEND,IYOR:IYEND,:,JVAR) = PRSVS(IXOR:IXEND,IYOR:IYEND,:,JVAR) &
diff --git a/src/MNH/update_nsv.f90 b/src/MNH/update_nsv.f90
index 084f0f2370b964418a329aa1db788d4683ebb74e..332e4c31e4e40f6fcd09f8eff1bfd6e6320c7415 100644
--- a/src/MNH/update_nsv.f90
+++ b/src/MNH/update_nsv.f90
@@ -21,6 +21,7 @@ END MODULE MODI_UPDATE_NSV
 !!                   current model. It is intended to be called from 
 !!                   any MesoNH routine WITH or WITHOUT $n before using 
 !!                   the NSV_* variables.
+!!  Modify (Escobar ) 2/2014 : add Forefire var
 USE MODD_CONF, ONLY : NVERB
 USE MODD_NSV
 IMPLICIT NONE 
@@ -85,6 +86,11 @@ NSV_LGEND   = NSV_LGEND_A(KMI)
 NSV_PP      = NSV_PP_A(KMI)
 NSV_PPBEG   = NSV_PPBEG_A(KMI)
 NSV_PPEND   = NSV_PPEND_A(KMI)
+#ifdef MNH_FOREFIRE
+NSV_FF      = NSV_FF_A(KMI)
+NSV_FFBEG   = NSV_FFBEG_A(KMI)
+NSV_FFEND   = NSV_FFEND_A(KMI)
+#endif
 NSV_CS      = NSV_CS_A(KMI)
 NSV_CSBEG   = NSV_CSBEG_A(KMI)
 NSV_CSEND   = NSV_CSEND_A(KMI)
diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90
index 10cac4b50ddf3e7ed3785bfda53843f5e52cadae..3340c807b28152d128a5bc1f6d5d9f7064ac7df8 100644
--- a/src/MNH/write_desfmn.f90
+++ b/src/MNH/write_desfmn.f90
@@ -187,6 +187,10 @@ USE MODN_PASPOL
 USE MODN_CONDSAMP
 USE MODN_2D_FRC
 USE MODN_LATZ_EDFLX
+#ifdef MNH_FOREFIRE
+USE MODN_FOREFIRE
+USE MODD_FOREFIRE_n, ONLY : FFCOUPLING
+#endif
 !
 IMPLICIT NONE
 !
@@ -207,6 +211,9 @@ LOGICAL                     ::  GHORELAX_UVWTH,                               &
                                 GHORELAX_RI,  GHORELAX_RS, GHORELAX_RG,       &
                                 GHORELAX_TKE, GHORELAX_SVC2R2, GHORELAX_SVPP, &
                                 GHORELAX_SVCS, GHORELAX_SVCHIC,               &
+#ifdef MNH_FOREFIRE
+                                GHORELAX_SVFF,                                &
+#endif
                                 GHORELAX_SVCHEM, GHORELAX_SVC1R3,GHORELAX_SVELEC
 LOGICAL                     ::  GHORELAX_SVDST, GHORELAX_SVSLT,  GHORELAX_SVAER
 LOGICAL, DIMENSION(JPSVMAX) ::  GHORELAX_SV
@@ -248,6 +255,9 @@ IF (CPROGRAM/='MESONH') THEN   ! impose default value for next simulation
   GHORELAX_SVDST = LHORELAX_SVDST
   GHORELAX_SVSLT = LHORELAX_SVSLT
   GHORELAX_SVPP  = LHORELAX_SVPP 
+#ifdef MNH_FOREFIRE
+  GHORELAX_SVFF  = LHORELAX_SVFF
+#endif
   GHORELAX_SVCS  = LHORELAX_SVCS 
   GHORELAX_SVAER = LHORELAX_SVAER
 !
@@ -267,6 +277,9 @@ IF (CPROGRAM/='MESONH') THEN   ! impose default value for next simulation
   LHORELAX_SVCHIC= .FALSE.
   LHORELAX_SVLG  = .FALSE.
   LHORELAX_SVPP  = .FALSE.
+#ifdef MNH_FOREFIRE
+  LHORELAX_SVFF  = .FALSE.
+#endif
   LHORELAX_SVCS  = .FALSE.
   LHORELAX_SVDST= .FALSE.
   LHORELAX_SVSLT= .FALSE.
@@ -331,6 +344,9 @@ IF(LUSECHEM) WRITE(UNIT=ILUSEG,NML=NAM_CH_SOLVERn)
 IF(LDUST) WRITE(UNIT=ILUSEG,NML=NAM_DUST)
 IF(LSALT) WRITE(UNIT=ILUSEG,NML=NAM_SALT)
 IF(LPASPOL) WRITE(UNIT=ILUSEG,NML=NAM_PASPOL)
+#ifdef MNH_FOREFIRE
+IF(FFCOUPLING) WRITE(UNIT=ILUSEG,NML=NAM_FOREFIRE)
+#endif
 IF(LCONDSAMP) WRITE(UNIT=ILUSEG,NML=NAM_CONDSAMP)
 IF(LORILAM.AND.LUSECHEM) WRITE(UNIT=ILUSEG,NML=NAM_CH_ORILAM)
 !
@@ -510,6 +526,11 @@ IF (NVERB >= 5) THEN
     WRITE(UNIT=ILUOUT,FMT="('********** PASPOL *****************************')")
     WRITE(UNIT=ILUOUT,NML=NAM_PASPOL)
 !
+#ifdef MNH_FOREFIRE
+    WRITE(UNIT=ILUOUT,FMT="('********** FOREFIRE *****************************')")
+    WRITE(UNIT=ILUOUT,NML=NAM_FOREFIRE)
+!
+#endif
     WRITE(UNIT=ILUOUT,FMT="('********** CONDSAMP****************************')")
     WRITE(UNIT=ILUOUT,NML=NAM_CONDSAMP)
 !
@@ -567,6 +588,9 @@ IF (CPROGRAM /='MESONH') THEN !return to previous LHORELAX_
   LHORELAX_SVDST = GHORELAX_SVDST
   LHORELAX_SVSLT = GHORELAX_SVSLT
   LHORELAX_SVPP  = GHORELAX_SVPP 
+#ifdef MNH_FOREFIRE
+  LHORELAX_SVFF  = GHORELAX_SVFF
+#endif
   LHORELAX_SVCS  = GHORELAX_SVCS 
   LHORELAX_SVAER = GHORELAX_SVAER
 ELSE
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index 4fe3b349f5aff6ba1969538f3e0f8d275bb16b37..6caf682bbf822ce66e1b3b49a127d854f865be38 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -825,6 +825,26 @@ END IF ! valeur IMOMENTS
            & IGRID,ILENCH,YCOMMENT,IRESP)
     END IF
   END DO
+#ifdef MNH_FOREFIRE
+  ! ForeFire scalar variables
+  DO JSV = NSV_FFBEG,NSV_FFEND
+    IF(NSIZELBXSV_ll /= 0) THEN
+      YRECFM = 'LBX_FF'
+      WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBX_FF',JSV,' (KG/KG)'
+      ILENCH=LEN(YCOMMENT)
+      CALL FMWRIT_LB(HFMFILE,YRECFM,CLUOUT,"LBX",XLBXSVM(:,:,:,JSV),IRIMX,NSIZELBXSV_ll,&
+           & IGRID,ILENCH,YCOMMENT,IRESP)
+    END IF
+!
+    IF(NSIZELBYSV_ll /= 0) THEN
+      YRECFM = 'LBY_FF'
+      WRITE(YCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBY_FF',JSV,' (KG/KG)'
+      ILENCH=LEN(YCOMMENT)
+      CALL FMWRIT_LB(HFMFILE,YRECFM,CLUOUT,"LBY",XLBYSVM(:,:,:,JSV),IRIMY,NSIZELBYSV_ll,&
+           & IGRID,ILENCH,YCOMMENT,IRESP)
+    END IF
+  END DO
+#endif
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index cd2e2c66a532c9c6a4dedb95761b6d1f052f59a6..dccd3ba65115e849477a52814e3674e21a3cf3c5 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -152,6 +152,7 @@ END MODULE MODI_WRITE_LFIFM_n
 !!       P.Peyrille    06/12 2D west african monsoon: ADV forcing and fluxes writing
 !!                     AEROSOLS and ozone vertical distribution are also written
 !!       M.Tomasini    06/12 2D west african monsoon: nesting for ADV forcing writing
+!!       Pialat/Tulet  15/02/2012 add ForeFire variables
 !!                   
 !-------------------------------------------------------------------------------
 !
@@ -204,6 +205,9 @@ USE MODD_PREP_REAL, ONLY: CDUMMY_2D, XDUMMY_2D
 USE MODD_DUST
 USE MODD_SALT
 USE MODD_PASPOL
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+#endif
 USE MODD_CONDSAMP
 USE MODD_CH_AEROSOL
 !
@@ -927,15 +931,26 @@ IF (NSV >=1) THEN
   ! Passive scalar variables        
  IF (LPASPOL) THEN
   DO JSV = NSV_PPBEG,NSV_PPEND
+      WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
+      WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
+      ILENCH=LEN(YCOMMENT)
+      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                  YCOMMENT,IRESP)
+      JSA=JSA+1
+    END DO
+  END IF
+#ifdef MNH_FOREFIRE
+  ! ForeFire scalar variables
+ IF ( LFOREFIRE ) THEN
+  DO JSV = NSV_FFBEG,NSV_FFEND
     WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
     WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
     ILENCH=LEN(YCOMMENT)
     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
                 YCOMMENT,IRESP)
-    JSA=JSA+1
   END DO
  END IF
-!
+#endif
   ! Conditional sampling variables  
  IF (LCONDSAMP) THEN
   DO JSV = NSV_CSBEG,NSV_CSEND
@@ -1263,6 +1278,379 @@ END IF
 CALL WRITE_LB_n(HFMFILE)
 !
 !
+IF (CSTORAGE_TYPE/='TT') THEN
+!
+!*       1.4.2  Time t:
+!   
+YRECFM='UT'
+YCOMMENT='X_Y_Z_U component of wind (m/s)'
+IGRID=2
+ILENCH=LEN(YCOMMENT)
+CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XUT,IGRID,ILENCH,YCOMMENT,IRESP)
+!
+YRECFM='VT'
+YCOMMENT='X_Y_Z_V component of wind (m/s)'
+IGRID=3
+ILENCH=LEN(YCOMMENT)
+CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XVT,IGRID,ILENCH,YCOMMENT,IRESP)
+!
+YRECFM='WT'
+YCOMMENT='X_Y_Z_vertical wind (m/s)'
+IGRID=4
+ILENCH=LEN(YCOMMENT)
+CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XWT,IGRID,ILENCH,YCOMMENT,IRESP)
+!
+YRECFM='THT'
+YCOMMENT='X_Y_Z_potential temperature (K)'
+IGRID=1
+ILENCH=LEN(YCOMMENT)
+CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTHT,IGRID,ILENCH,YCOMMENT,IRESP)
+!
+IF(CTURB/='NONE') THEN
+  YRECFM='TKET'
+  YCOMMENT='X_Y_Z_Turbulent Kinetic Energy (M**2/S**2)'
+  IGRID=1
+  ILENCH=LEN(YCOMMENT)
+  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTKET,IGRID,ILENCH,YCOMMENT,IRESP)
+END IF
+!
+!
+YRECFM='PABST'
+YCOMMENT='X_Y_Z_ABSolute Pressure (Pa)'
+IGRID=1
+ILENCH=LEN(YCOMMENT)
+CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XPABST,IGRID,ILENCH,YCOMMENT,IRESP)
+!
+IF (NRR >=1) THEN
+IRR=0
+  IGRID=1                                    ! individually in file 
+  IF (LUSERV) THEN
+    IRR   = IRR+1 
+    YRECFM= 'RVT'
+    YCOMMENT='X_Y_Z_Vapor mixing Ratio (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
+                YCOMMENT,IRESP)
+  END IF 
+  IF (LUSERC) THEN
+    IRR   = IRR+1 
+    YRECFM= 'RCT'
+    YCOMMENT='X_Y_Z_Cloud mixing Ratio (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
+                YCOMMENT,IRESP)
+  END IF
+  IF (LUSERR) THEN
+    IRR   = IRR+1 
+    YRECFM= 'RRT'
+    YCOMMENT='X_Y_Z_Rain mixing Ratio (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
+                YCOMMENT,IRESP)
+  END IF 
+  IF (LUSERI) THEN
+    IRR   = IRR+1 
+    YRECFM= 'RIT'
+    YCOMMENT='X_Y_Z_Ice mixing Ratio (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
+                YCOMMENT,IRESP)
+    IF ( CPROGRAM == 'MESONH' .AND. CCLOUD(1:3) == 'ICE') THEN
+      YRECFM= 'CIT'
+      YCOMMENT='X_Y_Z_Cloud Ice concentration (/M3)'
+      ILENCH=LEN(YCOMMENT)
+      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XCIT(:,:,:),   IGRID,ILENCH,  &
+                  YCOMMENT,IRESP)
+    END IF
+ END IF 
+  IF (LUSERS) THEN
+    IRR   = IRR+1 
+    YRECFM= 'RST'
+    YCOMMENT='X_Y_Z_Snow mixing Ratio (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
+                YCOMMENT,IRESP)
+  END IF
+  IF (LUSERG) THEN
+    IRR   = IRR+1 
+    YRECFM= 'RGT'
+    YCOMMENT='X_Y_Z_Graupel mixing Ratio (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
+                YCOMMENT,IRESP)
+  END IF 
+  IF (LUSERH) THEN
+    IRR   = IRR+1 
+    YRECFM= 'RHT'
+    YCOMMENT='X_Y_Z_Hail mixing Ratio (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
+                YCOMMENT,IRESP)
+  END IF 
+END IF
+!
+IF (NSV >=1) THEN
+  IGRID=1                                       ! individually in the file
+  ! User scalar variables
+  DO JSV = 1,NSV_USER
+    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
+    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                YCOMMENT,IRESP)
+  END DO
+  ! microphysical C2R2 scheme scalar variables
+  DO JSV = NSV_C2R2BEG,NSV_C2R2END
+    YRECFM=TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
+    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                YCOMMENT,IRESP)
+  END DO
+  ! microphysical C3R5 scheme additional scalar variables
+  DO JSV = NSV_C1R3BEG,NSV_C1R3END
+    YRECFM=TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
+    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/M3)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                YCOMMENT,IRESP)
+  END DO
+  ! electrical scalar variables
+  DO JSV = NSV_ELECBEG,NSV_ELECEND
+    YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
+    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (C/m3)'
+    ILENCH=LEN(YCOMMENT)
+    ZWORK3D(:,:,:) = 0.
+    ZWORK3D(:,:,:) = XSVT(:,:,:,JSV) * XRHODREF(:,:,:) ! C/kg --> C/m3
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
+                YCOMMENT,IRESP)
+  END DO
+
+  ! Passive scalar variables        
+ IF (LPASPOL) THEN
+  DO JSV = NSV_PPBEG,NSV_PPEND
+    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
+    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                YCOMMENT,IRESP)
+  END DO
+ END IF
+#ifdef MNH_FOREFIRE
+ IF (LFOREFIRE) THEN
+  DO JSV = NSV_FFBEG,NSV_FFEND
+    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
+    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                YCOMMENT,IRESP)
+  END DO
+ END IF
+#endif
+  ! Conditional sampling variables        
+ IF (LCONDSAMP) THEN
+  DO JSV = NSV_CSBEG,NSV_CSEND
+    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
+    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                YCOMMENT,IRESP)
+  END DO
+ END IF
+  ! chemical scalar variables
+  IF (LUSECHEM) THEN
+    DO JSV = NSV_CHEMBEG,NSV_CHEMEND
+      YRECFM=TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))//'T'
+      WRITE(YCOMMENT,'(A6,A3,I3.3,A)') 'X_Y_Z_','SVT',JSV,' (ppp)'
+      ILENCH=LEN(YCOMMENT)
+      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                  YCOMMENT,IRESP)
+    END DO
+    IF (LUSECHIC) THEN
+      DO JSV = NSV_CHICBEG,NSV_CHICEND
+        YRECFM=TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))//'T'
+        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+        ILENCH=LEN(YCOMMENT)
+        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                    YCOMMENT,IRESP)
+      END DO
+    ENDIF
+    IF (LUSECHAQ.AND.LCH_PH) THEN  ! pH values in cloud
+      YRECFM = 'PHC'
+      YCOMMENT='X_Y_Z_PHC'
+      ILENCH=LEN(YCOMMENT)
+      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XPHC,IGRID,ILENCH,YCOMMENT,IRESP)
+      IF (NRR>=3) THEN
+        YRECFM = 'PHR'
+        YCOMMENT='X_Y_Z_PHR'
+        ILENCH=LEN(YCOMMENT)
+        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XPHR,IGRID,ILENCH,YCOMMENT,IRESP)
+      ENDIF
+    ENDIF
+   ! linox scalar variables
+  ELSE IF (LCH_CONV_LINOX) THEN
+    DO JSV = NSV_LNOXBEG,NSV_LNOXEND
+      YRECFM='LINOXT'
+      WRITE(YCOMMENT,'(A6,A3,I3.3,A)') 'X_Y_Z_','SVT',JSV,' (ppp)'
+      ILENCH=LEN(YCOMMENT)
+      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, &
+                  YCOMMENT,IRESP)
+    END DO
+  ENDIF  
+  ! aerosol scalar variables
+  IF (LORILAM) THEN
+    IF ((CPROGRAM == 'REAL  ').AND.(NSV_AER > 1).AND.(IMI==1))  &
+      CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO), XRHODREF)
+    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_AER > 1).AND.(IMI==1))  &
+      CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),  XRHODREF)
+    DO JSV = NSV_AERBEG,NSV_AEREND
+      YRECFM=TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
+      WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+      ILENCH=LEN(YCOMMENT)
+      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                  YCOMMENT,IRESP)
+    END DO
+    IF (LDEPOS_AER(IMI)) THEN
+      DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
+        YRECFM=TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
+        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+        ILENCH=LEN(YCOMMENT)
+        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
+                    YCOMMENT,IRESP)
+      END DO   ! Loop on aq dust scalar variables        
+    ENDIF
+  END IF
+   ! dust scalar variables
+  IF (LDUST) THEN
+    IF ((CPROGRAM == 'REAL  ').AND.(NSV_DST > 1).AND.(IMI==1).AND.(LDSTINIT)) &
+      CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
+    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_DST > 1).AND.(IMI==1)) &
+      CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
+    !At this point, we have the tracer array in order of importance, i.e.
+    !if mode 2 is most important it will occupy place 1-3 of XSVM  
+    IF ((CPROGRAM == 'REAL  ').OR.(CPROGRAM == 'IDEAL ')) THEN
+      ! In this case CDUSTNAMES is not allocated. We will use YPDUST_INI,
+      !but remember that this variable does not follow JPDUSTORDER
+      IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG+1)/NMODE_DST  
+      !Should equal 3 at this point
+      IF (IMOMENTS > 3) THEN
+        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be 3'
+        WRITE(ILUOUT,*) NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
+ !callabortstop
+        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+        CALL ABORT
+        STOP
+      END IF
+      DO JMODE=1, NMODE_DST
+        DO JMOM = 1, IMOMENTS
+          !Index from which names are picked
+          ISV_NAME_IDX = (JPDUSTORDER(JMODE)-1)*IMOMENTS + JMOM 
+          !Index which counts in the XSVT
+          JSV = (JMODE-1)*IMOMENTS      & !Number of moments previously counted
+               + JMOM                   & !Number of moments in this mode
+               + (NSV_DSTBEG -1)          !Previous list of tracers 
+          YRECFM = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
+          WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+          ILENCH=LEN(YCOMMENT)
+          CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, &
+                      YCOMMENT,IRESP)
+        END DO ! Loop on moments
+      END DO   ! Loop on modes
+      !
+    ELSE 
+      ! We are in the subprogram MESONH, CDUSTNAMES are allocated and are 
+      !in the same order as the variables in XSVM (i.e. following JPDUSTORDER)
+      DO JSV = NSV_DSTBEG,NSV_DSTEND
+        YRECFM=TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
+        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+        ILENCH=LEN(YCOMMENT)
+        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
+                    YCOMMENT,IRESP)
+      END DO   ! Loop on dust scalar variables
+    END IF 
+  ! Loop on aq dust scalar variables
+    IF (LDEPOS_DST(IMI)) THEN
+      DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
+        YRECFM=TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
+        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+        ILENCH=LEN(YCOMMENT)
+        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
+                    YCOMMENT,IRESP)
+      END DO   ! Loop on aq dust scalar variables        
+    ENDIF
+  ENDIF  
+  !
+   ! sea salt scalar variables
+  IF (LSALT) THEN
+    IF ((CPROGRAM == 'REAL  ').AND.(NSV_SLT > 1).AND.(IMI==1)) &
+      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
+    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1).AND.(IMI==1)) &
+      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
+    !At this point, we have the tracer array in order of importance, i.e.
+    !if mode 2 is most important it will occupy place 1-3 of XSVM  
+    IF ((CPROGRAM == 'REAL  ').OR.(CPROGRAM == 'IDEAL ')) THEN
+      ! In this case CSALTNAMES is not allocated. We will use YPSALT_INI,
+      !but remember that this variable does not follow JPSALTORDER
+      IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG+1)/NMODE_SLT  
+      !Should equal 3 at this point
+      IF (IMOMENTS .NE. 3) THEN
+        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be 3'
+        WRITE(ILUOUT,*) NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
+ !callabortstop
+        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+        CALL ABORT
+        STOP
+      END IF
+      DO JMODE=1, NMODE_SLT
+        DO JMOM = 1, IMOMENTS
+          !Index from which names are picked
+          ISV_NAME_IDX = (JPSALTORDER(JMODE)-1)*IMOMENTS + JMOM 
+          !Index which counts in the XSVT
+          JSV = (JMODE-1)*IMOMENTS      & !Number of moments previously counted
+               + JMOM                   & !Number of moments in this mode
+               + (NSV_SLTBEG -1)          !Previous list of tracers 
+          YRECFM = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
+          WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+          ILENCH=LEN(YCOMMENT)
+          CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, &
+                      YCOMMENT,IRESP)
+        END DO ! Loop on moments
+      END DO   ! Loop on modes
+      !
+    ELSE 
+      ! We are in the subprogram MESONH, CSALTNAMES are allocated and are 
+      !in the same order as the variables in XSVM (i.e. following JPSALTORDER)
+      DO JSV = NSV_SLTBEG,NSV_SLTEND
+        YRECFM=TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
+        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+        ILENCH=LEN(YCOMMENT)
+        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
+                    YCOMMENT,IRESP)
+      END DO   ! Loop on sea salt scalar variables
+    END IF 
+    IF (LDEPOS_SLT(IMI)) THEN
+      DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
+        YRECFM=TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
+        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
+        ILENCH=LEN(YCOMMENT)
+        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
+                    YCOMMENT,IRESP)
+      END DO   ! Loop on aq dust scalar variables        
+    ENDIF
+  ENDIF  
+  !
+   ! lagrangian variables
+  DO JSV = NSV_LGBEG,NSV_LGEND
+    YRECFM=TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
+    WRITE(YCOMMENT,'(A6,A3,I3.3,A)') 'X_Y_Z_','SVT',JSV,' (M)'
+    ILENCH=LEN(YCOMMENT)
+    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
+                YCOMMENT,IRESP)
+  END DO
+END IF
+!
+END IF ! test on CSTORAGE_TYPE
+!
 YRECFM='DRYMASST'
 YDIR='--'
 YCOMMENT='Total Dry Mass (KG)'
@@ -1687,6 +2075,17 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
       CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XDSVCONV(:,:,:,JSV),          &
            IGRID,ILENCH,YCOMMENT,IRESP)
     END DO
+#ifdef MNH_FOREFIRE
+    IF (LFOREFIRE) THEN
+     DO JSV = NSV_FFBEG, NSV_FFEND
+      WRITE(YRECFM,'(A7,I3.3)')'DSVCONV',JSV
+      WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)'
+     ILENCH = LEN(YCOMMENT)
+     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XDSVCONV(:,:,:,JSV),          &
+       IGRID,ILENCH,YCOMMENT,IRESP)
+     END DO
+    END IF
+#endif
     IF (LUSECHEM) THEN
       DO JSV = NSV_CHEMBEG, NSV_CHEMEND
         YRECFM = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
diff --git a/src/Makefile.MESONH.mk b/src/Makefile.MESONH.mk
index abb294ba597d7843a622e41e13fe1e3010bb3d14..420b2f065996087855d360dfb0c9ed59181cb43f 100644
--- a/src/Makefile.MESONH.mk
+++ b/src/Makefile.MESONH.mk
@@ -175,6 +175,18 @@ VPATH               += $(DIR_NEWLFI)
 #ARCH_XYZ    := $(ARCH_XYZ)-$(VER_NEWLFI)
 endif
 ##########################################################
+#           Source FOREFIRE                              #
+##########################################################
+ifdef MNH_FOREFIRE
+DIR_FOREFIRE          += LIB/FOREFIRE
+INC_FOREFIRE           = -I$(B)$(DIR_FOREFIRE)
+DIR_MASTER            += $(DIR_FOREFIRE)
+OBJS_LISTE_MASTER     += C_ForeFire_Interface.o
+INC                   += $(INC_FOREFIRE)
+VPATH                 += $(DIR_FOREFIRE)
+CPPFLAGS              += -DMNH_FOREFIRE
+endif
+##########################################################
 #           Source MPIVIDE                               #
 ##########################################################
 #