diff --git a/.gitignore b/.gitignore
index e38a0bd599723aa5eafdad96980bc566d075591e..e0c831da8748657a7a273664248d6294754cfc16 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,5 @@
 *~
 *.bak
 .coq-native/
+iris-enabled
 Makefile.coq
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..20e39e3f1b3b632434ef59ce75890de0a0ab8b1f
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,33 @@
+image: coq:8.5
+
+stages:
+  - iris
+  - lrust
+
+iris:
+  stage: iris
+  tags:
+  - coq
+  script:
+  - coqc -v
+  # see if the Iris submodule needs cleaning, then build it
+  - 'git submodule status iris | egrep "^ " || (git submodule update --init iris && cd iris && git clean -xfd)'
+  - 'cd iris && make -j8'
+  only:
+  - master
+  - ci
+
+lrust:
+  stage: lrust
+  tags:
+  - coq
+  script:
+  - coqc -v
+  # prepare the environment, safeguard against outdated submodule
+  - 'git submodule status iris | egrep "^ "'
+  - 'ln -s iris iris-enabled'
+  # build local repo
+  - 'time make -j8'
+  only:
+  - master
+  - ci
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..941d913e2ae27c2842dff9d29ab0cb6547e03ba1
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "iris"]
+	path = iris
+	url = https://gitlab.mpi-sws.org/FP/iris-coq.git
diff --git a/Makefile b/Makefile
index 6c554b2751754c364a05e7cad9ad4634c68da0a4..4ab350fe1e22af810ac424b9f65dfbafde0c2b12 100644
--- a/Makefile
+++ b/Makefile
@@ -1,20 +1,31 @@
+
 # Makefile originally taken from coq-club
 
-%: Makefile.coq
-	+make -f Makefile.coq $@
+%: Makefile.coq phony
+	+@make -f Makefile.coq $@
 
 all: Makefile.coq
-	+make -f Makefile.coq all
+	+@make -f Makefile.coq all
 
 clean: Makefile.coq
-	+make -f Makefile.coq clean
+	+@make -f Makefile.coq clean
 	rm -f Makefile.coq
 
 Makefile.coq: _CoqProject Makefile
 	coq_makefile -f _CoqProject | sed 's/$$(COQCHK) $$(COQCHKFLAGS) $$(COQLIBS)/$$(COQCHK) $$(COQCHKFLAGS) $$(subst -Q,-R,$$(COQLIBS))/' > Makefile.coq
 
+iris-local: clean
+	git submodule update --init iris
+	ln -s iris iris-enabled
+	+make -C iris -f Makefile
+
+iris-system: clean
+	rm -f iris-enabled
+
 _CoqProject: ;
 
 Makefile: ;
 
-.PHONY: all clean
+phony: ;
+
+.PHONY: all clean phony iris-local iris-system
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b55b334704cfd5eefbdb988b92a56dbd8353a611
--- /dev/null
+++ b/README.md
@@ -0,0 +1,26 @@
+# LAMBDA-RUST COQ DEVELOPMENT
+
+This is the Coq formalization of lambda-Rust.
+
+## Prerequisites
+
+This version is known to compile with:
+
+ - Coq 8.5pl2
+ - Ssreflect 1.6
+
+You will furthermore need an up-to-date version of
+[Iris](https://gitlab.mpi-sws.org/FP/iris-coq/).  Run `git submodule status` to
+see which git commit of Iris is known to work.  You can pick between using a
+system-installed Iris (from Coq's `user-contrib`) or a version of Iris locally
+compiled for lambda-Rust.
+
+## Building Instructions
+
+To use the system-installed Iris (which is the default), run `make iris-system`.
+This only works if you previously built and installed a compatible version of the
+Iris Coq formalization.  To use a local Iris (which will always be the right
+version), run `make iris-local`.  Run this command again later to update the
+local Iris, in case the preferred Iris version changed.
+
+Now run `make` to build the full development.
diff --git a/_CoqProject b/_CoqProject
index 9769f2a71cc1a9a4dffe3081347bbb917d116cb4..c4ae5b38be5032c7027833b1b1003f4740daa6b4 100644
--- a/_CoqProject
+++ b/_CoqProject
@@ -1,18 +1,19 @@
--Q . lrust
-adequacy.v
-derived.v
-heap.v
-lang.v
-lifting.v
-memcpy.v
-notation.v
-proofmode.v
-races.v
-tactics.v
-wp_tactics.v
-lifetime.v
-type.v
-type_incl.v
-perm.v
-perm_incl.v
-typing.v
+-Q theories lrust
+-Q iris-enabled iris
+theories/adequacy.v
+theories/derived.v
+theories/heap.v
+theories/lang.v
+theories/lifting.v
+theories/memcpy.v
+theories/notation.v
+theories/proofmode.v
+theories/races.v
+theories/tactics.v
+theories/wp_tactics.v
+theories/lifetime.v
+theories/type.v
+theories/type_incl.v
+theories/perm.v
+theories/perm_incl.v
+theories/typing.v
diff --git a/iris b/iris
new file mode 160000
index 0000000000000000000000000000000000000000..bb5e21f21fd1b5be820005eb53750f84270ab4ec
--- /dev/null
+++ b/iris
@@ -0,0 +1 @@
+Subproject commit bb5e21f21fd1b5be820005eb53750f84270ab4ec