diff --git a/DESCRIPTION b/DESCRIPTION
index 1965624cc7e3919ad3e6562cd345e8d5532422b6..f7647491b799248c6829d6d67345d03821302278 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,7 @@
 Package: airGR
 Type: Package
 Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
-Version: 1.0.9.15
+Version: 1.0.9.16
 Date: 2017-07-12
 Authors@R: c(
   person("Laurent", "Coron", role = c("aut", "trl")),
diff --git a/NAMESPACE b/NAMESPACE
index b5a907419071c70bc39f67f647cd6749a172d5de..d5fab141d7ddcbae2a3827463337b265b578c7e7 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -1,7 +1,7 @@
 #####################################
 ##              Load DLL           ##
 #####################################
-useDynLib(airGR)
+useDynLib(airGR, .registration = TRUE)
 
 
 
diff --git a/src/airGR.c b/src/airGR.c
new file mode 100644
index 0000000000000000000000000000000000000000..9c149457a5d36fe9bea49df47c352c49f82c59d9
--- /dev/null
+++ b/src/airGR.c
@@ -0,0 +1,33 @@
+#include <R_ext/RS.h>
+#include <stdlib.h> // for NULL
+#include <R_ext/Rdynload.h>
+
+/* FIXME: 
+   Check these declarations against the C/Fortran source code.
+*/
+
+/* .Fortran calls */
+extern void F77_NAME(frun_cemaneige)(int *, double *, double *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr1a)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr2m)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr4h)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr4j)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr5j)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr6j)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+
+static const R_FortranMethodDef FortranEntries[] = {
+    {"frun_cemaneige", (DL_FUNC) &F77_NAME(frun_cemaneige), 13},
+    {"frun_gr1a",      (DL_FUNC) &F77_NAME(frun_gr1a),      11},
+    {"frun_gr2m",      (DL_FUNC) &F77_NAME(frun_gr2m),      11},
+    {"frun_gr4h",      (DL_FUNC) &F77_NAME(frun_gr4h),      11},
+    {"frun_gr4j",      (DL_FUNC) &F77_NAME(frun_gr4j),      11},
+    {"frun_gr5j",      (DL_FUNC) &F77_NAME(frun_gr5j),      11},
+    {"frun_gr6j",      (DL_FUNC) &F77_NAME(frun_gr6j),      11},
+    {NULL, NULL, 0}
+};
+
+void R_init_airGR(DllInfo *dll)
+{
+    R_registerRoutines(dll, NULL, NULL, FortranEntries, NULL);
+    R_useDynamicSymbols(dll, FALSE);
+}