diff --git a/Makefile b/Makefile
index af11313f75b4fdb4d46af4c79cce57c595312a56..ccca23d7fb3f6cb4e61d5c69dcce496b6979750e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,15 @@
 PUB_FILES=driver.html libraries jquery-ui-1.11.4.custom jquery_scroll \
-	generator/tests/jsref/displayed_sources.js tools.js node_modules/esprima/esprima.js \
-	esprima-to-ast.js generator/tests/jsref/lineof.js navig-driver.js \
-	generator/tests/jsref/assembly.js
+	  jsref/displayed_sources.js tools.js node_modules/esprima/esprima.js \
+	  esprima-to-ast.js jsref/lineof.js navig-driver.js \
+	  jsref/assembly.js
+
+all: jsjsref
+
+init:
+	opam switch 4.03.0
+	eval `opam config env`
+	opam pin -yn add jsjsref .
+	opam install -y jsjsref --deps-only
 
 publish: generator $(PUB_FILES)
 	rsync -azR --no-p --rsh=ssh -O $^ gf:/home/groups/ajacs/htdocs/jsexplain/
@@ -9,10 +17,13 @@ publish: generator $(PUB_FILES)
 generator:
 	$(MAKE) -C generator
 
+jsjsref: generator
+	$(MAKE) -C jsref
+
 test_init:
 	npm install
 
 test: generator
 	node_modules/.bin/mocha
 
-.PHONY: publish generator test_init test
+.PHONY: publish jsjsref generator test_init test
diff --git a/generator/.gitignore b/generator/.gitignore
index d301b77fc4c0faf34e76cff802c3e6895a47f09e..6b45179e462ac6a959733d86327cfde903d20de0 100644
--- a/generator/.gitignore
+++ b/generator/.gitignore
@@ -1,13 +1,6 @@
-*.cmi
-*.log.js
-*.unlog.js
-*.token.js
-*.pseudo.js
-*.ptoken.js
-*.mlloc.js
-*.pre
-tests/jsref/assembly.js
-tests/jsref/lineof.js
-tests/jsref/.depends
-tests/jsref/displayed_sources.js
+_build
+*.byte
+*.native
+stdlib_ml/stdlib.cmi
 .ocamldebug
+
diff --git a/generator/Makefile b/generator/Makefile
index 80845c5a9ec1c409edb71f0d4a161ed52b9a4f82..0d9385abe162661103ef25549d048db0618265f4 100644
--- a/generator/Makefile
+++ b/generator/Makefile
@@ -1,274 +1,35 @@
-	#
-# Usage:
-#    make all  # not implemented yet, will build everything
-#    make full    # build *.log.js, *.unlog.js, *.token.js
-#    make lineof  # build lineof.js
-#    make interp  # build interp.js
-#
-
-# TODO: test/lambda is not longer supported
-
-###############################################################
-# Paths
-
-all: everything
-init:
-	opam switch 4.03.0
-	eval `opam config env`
-	opam pin -yn add jsjsref .
-	opam install -y jsjsref --deps-only
-
-
-STDLIB_DIR  := stdlib_ml
-TESTS_DIR   := tests
-JSREF_DIR   := jsref
-JSREF_PATH  := $(TESTS_DIR)/$(JSREF_DIR)
-JSREF_ML    := $(filter-out JsOutput.ml,$(wildcard $(JSREF_PATH)/*.ml))
-JSREF_MLI   := $(wildcard $(JSREF_PATH)/*.mli)
-
-
-###############################################################
-
-# ASSEMBLY_JS must respect dependencies order
-ASSEMBLY_JS_FILES := \
-	BinNums.unlog.js \
-	Bool0.unlog.js \
-	List0.unlog.js \
-	Datatypes.unlog.js \
-	Fappli_IEEE_bits.unlog.js \
-	Fappli_IEEE.unlog.js \
-	LibList.unlog.js \
-	LibOption.unlog.js \
-	LibProd.unlog.js \
-	StdMap.unlog.js \
-	Heap.unlog.js \
-	HeapInt.unlog.js \
-	HeapStr.unlog.js \
-	HeapList.unlog.js \
-	Shared.unlog.js \
-	Compare.js \
-	Debug.js \
-	JsNumber.js \
-	JsSyntax.unlog.js \
-	JsSyntaxAux.unlog.js \
-	HeapObj.unlog.js \
-	Translate_syntax.js \
-	JsCommon.unlog.js \
-	JsCommonAux.unlog.js \
-	JsPreliminary.unlog.js \
-	JsInit.unlog.js \
-	JsInterpreterMonads.unlog.js \
-	JsInterpreter.log.js \
-	ModuleExport.js
-ASSEMBLY_JS := $(STDLIB_DIR)/stdlib.js $(addprefix tests/jsref/,$(ASSEMBLY_JS_FILES))
-
-#	
-
-
-###############################################################
-
-DISPLAYED_FILES := \
-	JsInterpreter.ml
-
-DISPLAYED := $(addprefix tests/jsref/,$(DISPLAYED_FILES))
-
-ALL_DISPLAYED := $(DISPLAYED:.ml=.unlog.js) $(DISPLAYED:.ml=.pseudo.js) $(DISPLAYED)
-
-ALL_LINEOF := $(DISPLAYED:.ml=.token.js) $(DISPLAYED:.ml=.mlloc.js) $(DISPLAYED:.ml=.ptoken.js)
-
-
-###############################################################
-# Global options
-
-.PHONY: all clean .log.js .unlog.js .token.js .mlloc.js .ptoken.js .pseudo.js
-   # all gen log unlog 
-
-# Do not delete intermediate files.
-.SECONDARY:
-
-
-###############################################################
-# Tools
-
+OCAMLBUILD  := ocamlbuild -j 4 -classic-display -use-ocamlfind
 CC          := ocamlc -c
-OCAMLDEP    := ocamldep -one-line
-OCAMLBUILD := ocamlbuild -j 4 -classic-display -use-ocamlfind -X tests -X $(STDLIB_DIR)
-
-OCAMLPAR := OCAMLRUNPARAM="l=200M"
-
-LINEOF := $(OCAMLPAR) ./lineof.byte
-MLTOJS := $(OCAMLPAR) ./main.byte -ppx ./monad_ppx.native
-# -dsource is automatically considered by main.byte
-
-
-DISPLAYGEN := $(OCAMLPAR) ./displayed_sources.byte
-
-###############################################################
-# Dependencies
-
-ifeq ($(filter clean%,$(MAKECMDGOALS)),)
-#-include $(JSREF_ML:.ml=.ml.d)
-include $(JSREF_PATH)/.depends
-endif
+STDLIB_DIR  := stdlib_ml
+EXECUTABLES := main monad_ppx displayed_sources lineof assembly
 
+all: byte native stdlib
+byte:   $(addsuffix .byte,$(EXECUTABLES))
+native: $(addsuffix .native,$(EXECUTABLES))
+stdlib: $(STDLIB_DIR)/stdlib.cmi
 
-###############################################################
 # Rules
-
-
-
-##### Compilation of STDLIB
-
-$(STDLIB_DIR)/stdlib.cmi: $(STDLIB_DIR)/stdlib.mli
-	$(CC) $<
-
-##### Rule for parser extension
-
-monad_ppx.native: monad_ppx.ml
+%.native: FORCE
 	$(OCAMLBUILD) $@
 
-##### Rule for binaries
-
-%.byte: *.ml _tags monad_ppx.native
+%.byte: FORCE
 	$(OCAMLBUILD) $@
 
-##### Rule for dependencies
-
-$(JSREF_PATH)/.depends: $(JSREF_ML)
-	$(OCAMLDEP) -all -I $(<D) $(<D)/* > $@
-
-
-##### Rule for cmi
-tests/%.cmi: tests/%.ml main.byte stdlib
-	$(MLTOJS) -mode cmi -I $(<D) $<
-
-tests/%.cmi: tests/%.mli stdlib
-	ocamlc -I $(JSREF_PATH) -I stdlib_ml -open Stdlib $<
-
-##### Rule for log/unlog/token
-
-tests/%.log.js: tests/%.ml main.byte stdlib tests/%.cmi
-	$(MLTOJS) -mode log -I $(<D) $<
-
-tests/%.unlog.js: tests/%.ml main.byte stdlib tests/%.cmi
-	$(MLTOJS) -mode unlog -I $(<D) $<
-
-tests/%.token.js tests/%.mlloc.js: tests/%.ml main.byte stdlib tests/%.cmi
-	$(MLTOJS) -mode token -I $(<D) $<
-
-tests/%.pseudo.js: tests/%.ml main.byte stdlib tests/%.cmi
-	$(MLTOJS) -mode pseudo -I $(<D) $<
-
-tests/%.ptoken.js: tests/%.ml main.byte stdlib tests/%.cmi
-	$(MLTOJS) -mode ptoken -I $(<D) $<
-
-##### Rule for lineof.js
-
-$(JSREF_PATH)/lineof.js: lineof.byte $(ALL_LINEOF)
-	./lineof.byte -o $@ $(ALL_LINEOF)
-
-##### Rule for assembly.js
-
-#--LATER (optional) add as dependencies the unlog files: $(JSREF_ML:.ml=.unlog.js)
-
-$(JSREF_PATH)/assembly.js: assembly.byte $(ASSEMBLY_JS)
-	./assembly.byte -o $@ $(ASSEMBLY_JS)
-# -stdlib $(STDLIB_DIR)/stdlib.js 
-
-##### Rule for displayed_sources.js
-
-$(JSREF_PATH)/displayed_sources.js: displayed_sources.byte  $(ALL_DISPLAYED)
-	$(DISPLAYGEN) -o $@ $(ALL_DISPLAYED)
-
-
-pseudo: tests/jsref/JsInterpreter.pseudo.js tests/jsref/JsInterpreter.ptoken.js
-
-
-
-#### maybe useful ??
-
-tests/jsref/%.log.js: tests/jsref/%.ml 
-
-
-#####################################################################
-# Short targets
-
-everything: assembly lineof display
-
-main: main.byte
-
-cmi: $(JSREF_ML:.ml=.cmi) $(JSREF_MLI:.mli=.cmi) 
-
-gen: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.unlog.js) $(JSREF_ML:.ml=.token.js)
-
-ref: $(JSREF_PATH)/JsInterpreter.log.js $(JSREF_PATH)/JsInterpreter.unlog.js $(JSREF_PATH)/JsInterpreter.token.js
-
-log: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.token.js)
-
-unlog: $(JSREF_ML:.ml=.unlog.js) 
-
-lineof: $(JSREF_PATH)/lineof.js
-
-assembly: $(JSREF_PATH)/assembly.js
-
-display: $(JSREF_PATH)/displayed_sources.js
-
-stdlib: $(STDLIB_DIR)/stdlib.cmi
-
-
-
-#####################################################################
-# Clean
-
-DIRTY_EXTS := cmi,.mlloc.js,token.js,log.js,unlog.js,d,ml.d,mli.d,js.pre
-
-clean_genjs:
-	rm -f $(JSREF_PATH)/lineof.js
-	rm -f $(JSREF_PATH)/assembly.js
-
-clean_tests:
-	bash -c "rm -f $(JSREF_PATH)/*.{$(DIRTY_EXTS)}"
-	bash -c "rm -f $(JSREF_PATH)/.depends"
-
-#	bash -c "rm -f $(TESTS_DIR)/*.{$(DIRTY_EXTS)}"
-
-clean_stdlib:
-	rm -f $(STDLIB_DIR)/*.cmi
-
-clean: clean_genjs clean_tests clean_stdlib
-	rm -rf _build
-	bash -c "rm -rf .ocamldebug"
-	rm -f *.native *.byte
-
-
-
-#####################################################################
-# Extra
+$(STDLIB_DIR)/stdlib.cmi: $(STDLIB_DIR)/stdlib.mli
+	$(CC) $<
 
-debug: main.d.byte .ocamldebug
+# Debug
+debug:  $(addsuffix .d.byte,$(EXECUTABLES)) .ocamldebug
 
 .ocamldebug: _tags
 	grep -o "package([^)]*)" _tags | sed "s/package(\([^)]*\))/\1/" | xargs ocamlfind query -recursive | sed "s/^/directory /" > .ocamldebug
 
-native: _tags
-	$(OCAMLBUILD) main.native
-
-##### Shorthand
-
-tests/%.all: tests/%.log.js tests/%.unlog.js tests/%.token.js
-	touch $@
-
-#####################################################################
-# Original Build of JSRef Coq to "Humanified" OCaml
+clean:
+	ocamlbuild -clean
+	rm -f $(STDLIB_DIR)/*.cmi
+	bash -c "rm -f .ocamldebug"
 
-#tests/%.ml: tests/%.v
-#	$(MAKE) -C $(CURDIR)/../../lib/tlc/src
-#	cd $(<D) && coqc -I $(CURDIR)/../../lib/tlc/src $(<F)
-#	cd $(@D) && rm *.mli
-#	cd $(@D) && $(CURDIR)/../ml-add-cstr-annots.pl *.ml
+.PHONY: all byte native stdlib debug clean
 
-#$(JSREF_PATH)/%.ml:
-#	$(MAKE) -C $(CURDIR)/../.. interpreter
-#	cp ../../interp/src/extract/*.ml $(JSREF_PATH)/
-#	../convert-ml-strings.pl $(JSREF_PATH)/*.ml
-#	cd $(@D) && $(CURDIR)/../ml-add-cstr-annots.pl *.ml
+# Force rebuilds of OCaml targets via ocamlbuild, the FORCE file must not exist.
+FORCE:
diff --git a/generator/_tags b/generator/_tags
index 0909b3f71e714b38f5cdb910bcc6dfdd06027dc2..8e2d3b9d7e5c5084d7be01db98e8314bc6dc5dae 100644
--- a/generator/_tags
+++ b/generator/_tags
@@ -3,5 +3,5 @@ true: package(str), package(compiler-libs.common)
 # Generate cmt type information files
 true: bin_annot
 
-# <tests>: precious
-# <stdlib_ml>: precious
+<tests>: -traverse
+<stdlib_ml>: -traverse
diff --git a/generator/js_of_ast.ml b/generator/js_of_ast.ml
index 55eab9be79c468a321fd5e4bfb48a3e83249a596..44d752aef9e3fe82ec9273e5f73d94672efb7f20 100644
--- a/generator/js_of_ast.ml
+++ b/generator/js_of_ast.ml
@@ -242,9 +242,7 @@ let is_coercion_constructor lident =
       "Coq_resvalue_ref"; 
       "Coq_resvalue_ref"; 
       ] in 
-    if (is_mode_pseudo()) then Printf.printf "%s %s\n" x (if b then " [yes]" else ""); (* *)
-
-
+    (* if (is_mode_pseudo()) then Printf.printf "%s %s\n" x (if b then " [yes]" else ""); *)
     b
 
 
diff --git a/generator/tests/jsref/Makefile b/generator/tests/jsref/Makefile
deleted file mode 100644
index caf836f0f51a216011beed83ee4354a28228124d..0000000000000000000000000000000000000000
--- a/generator/tests/jsref/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-
-all:
-	make -C ../..
\ No newline at end of file
diff --git a/jsref/.gitignore b/jsref/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..813a567258b5442dee987063548dd845e43d9be5
--- /dev/null
+++ b/jsref/.gitignore
@@ -0,0 +1,12 @@
+*.cmi
+*.log.js
+*.unlog.js
+*.token.js
+*.pseudo.js
+*.ptoken.js
+*.mlloc.js
+*.pre
+assembly.js
+lineof.js
+.depends
+displayed_sources.js
diff --git a/generator/tests/jsref/BinNums.ml b/jsref/BinNums.ml
similarity index 100%
rename from generator/tests/jsref/BinNums.ml
rename to jsref/BinNums.ml
diff --git a/generator/tests/jsref/Bool0.ml b/jsref/Bool0.ml
similarity index 100%
rename from generator/tests/jsref/Bool0.ml
rename to jsref/Bool0.ml
diff --git a/generator/tests/jsref/Compare.js b/jsref/Compare.js
similarity index 100%
rename from generator/tests/jsref/Compare.js
rename to jsref/Compare.js
diff --git a/generator/tests/jsref/Datatypes.ml b/jsref/Datatypes.ml
similarity index 100%
rename from generator/tests/jsref/Datatypes.ml
rename to jsref/Datatypes.ml
diff --git a/generator/tests/jsref/Debug.js b/jsref/Debug.js
similarity index 100%
rename from generator/tests/jsref/Debug.js
rename to jsref/Debug.js
diff --git a/generator/tests/jsref/Debug.mli b/jsref/Debug.mli
similarity index 100%
rename from generator/tests/jsref/Debug.mli
rename to jsref/Debug.mli
diff --git a/generator/tests/jsref/Fappli_IEEE.ml b/jsref/Fappli_IEEE.ml
similarity index 100%
rename from generator/tests/jsref/Fappli_IEEE.ml
rename to jsref/Fappli_IEEE.ml
diff --git a/generator/tests/jsref/Fappli_IEEE_bits.ml b/jsref/Fappli_IEEE_bits.ml
similarity index 100%
rename from generator/tests/jsref/Fappli_IEEE_bits.ml
rename to jsref/Fappli_IEEE_bits.ml
diff --git a/generator/tests/jsref/Heap.ml b/jsref/Heap.ml
similarity index 100%
rename from generator/tests/jsref/Heap.ml
rename to jsref/Heap.ml
diff --git a/generator/tests/jsref/HeapInt.ml b/jsref/HeapInt.ml
similarity index 100%
rename from generator/tests/jsref/HeapInt.ml
rename to jsref/HeapInt.ml
diff --git a/generator/tests/jsref/HeapList.ml b/jsref/HeapList.ml
similarity index 100%
rename from generator/tests/jsref/HeapList.ml
rename to jsref/HeapList.ml
diff --git a/generator/tests/jsref/HeapObj.ml b/jsref/HeapObj.ml
similarity index 100%
rename from generator/tests/jsref/HeapObj.ml
rename to jsref/HeapObj.ml
diff --git a/generator/tests/jsref/HeapStr.ml b/jsref/HeapStr.ml
similarity index 100%
rename from generator/tests/jsref/HeapStr.ml
rename to jsref/HeapStr.ml
diff --git a/generator/tests/jsref/JsCommon.ml b/jsref/JsCommon.ml
similarity index 100%
rename from generator/tests/jsref/JsCommon.ml
rename to jsref/JsCommon.ml
diff --git a/generator/tests/jsref/JsCommonAux.ml b/jsref/JsCommonAux.ml
similarity index 100%
rename from generator/tests/jsref/JsCommonAux.ml
rename to jsref/JsCommonAux.ml
diff --git a/generator/tests/jsref/JsInit.ml b/jsref/JsInit.ml
similarity index 100%
rename from generator/tests/jsref/JsInit.ml
rename to jsref/JsInit.ml
diff --git a/generator/tests/jsref/JsInterpreter.ml b/jsref/JsInterpreter.ml
similarity index 100%
rename from generator/tests/jsref/JsInterpreter.ml
rename to jsref/JsInterpreter.ml
diff --git a/generator/tests/jsref/JsInterpreterMonads.ml b/jsref/JsInterpreterMonads.ml
similarity index 100%
rename from generator/tests/jsref/JsInterpreterMonads.ml
rename to jsref/JsInterpreterMonads.ml
diff --git a/generator/tests/jsref/JsNumber.js b/jsref/JsNumber.js
similarity index 100%
rename from generator/tests/jsref/JsNumber.js
rename to jsref/JsNumber.js
diff --git a/generator/tests/jsref/JsNumber.mli b/jsref/JsNumber.mli
similarity index 100%
rename from generator/tests/jsref/JsNumber.mli
rename to jsref/JsNumber.mli
diff --git a/generator/tests/jsref/JsPreliminary.ml b/jsref/JsPreliminary.ml
similarity index 100%
rename from generator/tests/jsref/JsPreliminary.ml
rename to jsref/JsPreliminary.ml
diff --git a/generator/tests/jsref/JsSyntax.ml b/jsref/JsSyntax.ml
similarity index 100%
rename from generator/tests/jsref/JsSyntax.ml
rename to jsref/JsSyntax.ml
diff --git a/generator/tests/jsref/JsSyntaxAux.ml b/jsref/JsSyntaxAux.ml
similarity index 100%
rename from generator/tests/jsref/JsSyntaxAux.ml
rename to jsref/JsSyntaxAux.ml
diff --git a/generator/tests/jsref/LibList.ml b/jsref/LibList.ml
similarity index 100%
rename from generator/tests/jsref/LibList.ml
rename to jsref/LibList.ml
diff --git a/generator/tests/jsref/LibOption.ml b/jsref/LibOption.ml
similarity index 100%
rename from generator/tests/jsref/LibOption.ml
rename to jsref/LibOption.ml
diff --git a/generator/tests/jsref/LibProd.ml b/jsref/LibProd.ml
similarity index 100%
rename from generator/tests/jsref/LibProd.ml
rename to jsref/LibProd.ml
diff --git a/generator/tests/jsref/List0.ml b/jsref/List0.ml
similarity index 100%
rename from generator/tests/jsref/List0.ml
rename to jsref/List0.ml
diff --git a/jsref/Makefile b/jsref/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..6b2617d6b4edf071d4fe40e5828a0521833fad71
--- /dev/null
+++ b/jsref/Makefile
@@ -0,0 +1,190 @@
+#
+# Usage:
+#    make all  # not implemented yet, will build everything
+#    make full    # build *.log.js, *.unlog.js, *.token.js
+#    make lineof  # build lineof.js
+#    make interp  # build interp.js
+#
+###############################################################
+# Paths
+
+all: # Defined below
+
+JSREF_DIR := .
+JSREF_ML  := $(filter-out JsOutput.ml,$(wildcard $(JSREF_DIR)/*.ml))
+JSREF_MLI := $(wildcard $(JSREF_DIR)/*.mli)
+
+GENERATOR_DIR := ../generator
+STDLIB_DIR := $(GENERATOR_DIR)/stdlib_ml
+
+###############################################################
+
+# ASSEMBLY_JS must respect dependencies order
+ASSEMBLY_JS_FILES := \
+	BinNums.unlog.js \
+	Bool0.unlog.js \
+	List0.unlog.js \
+	Datatypes.unlog.js \
+	Fappli_IEEE_bits.unlog.js \
+	Fappli_IEEE.unlog.js \
+	LibList.unlog.js \
+	LibOption.unlog.js \
+	LibProd.unlog.js \
+	StdMap.unlog.js \
+	Heap.unlog.js \
+	HeapInt.unlog.js \
+	HeapStr.unlog.js \
+	HeapList.unlog.js \
+	Shared.unlog.js \
+	Compare.js \
+	Debug.js \
+	JsNumber.js \
+	JsSyntax.unlog.js \
+	JsSyntaxAux.unlog.js \
+	HeapObj.unlog.js \
+	Translate_syntax.js \
+	JsCommon.unlog.js \
+	JsCommonAux.unlog.js \
+	JsPreliminary.unlog.js \
+	JsInit.unlog.js \
+	JsInterpreterMonads.unlog.js \
+	JsInterpreter.log.js \
+	ModuleExport.js
+ASSEMBLY_JS := $(STDLIB_DIR)/stdlib.js $(addprefix $(JSREF_DIR)/,$(ASSEMBLY_JS_FILES))
+
+
+###############################################################
+
+DISPLAYED_FILES := \
+	JsInterpreter.ml
+
+DISPLAYED := $(addprefix $(JSREF_DIR)/,$(DISPLAYED_FILES))
+
+ALL_DISPLAYED := $(DISPLAYED:.ml=.unlog.js) $(DISPLAYED:.ml=.pseudo.js) $(DISPLAYED)
+
+ALL_LINEOF := $(DISPLAYED:.ml=.token.js) $(DISPLAYED:.ml=.mlloc.js) $(DISPLAYED:.ml=.ptoken.js)
+
+###############################################################
+# Tools
+
+OCAMLDEP := ocamldep -one-line
+OCAMLPAR := OCAMLRUNPARAM="l=200M"
+
+LINEOF_BIN := $(GENERATOR_DIR)/lineof.byte
+LINEOF     := $(OCAMLPAR) $(LINEOF_BIN)
+
+MLTOJS_BIN := $(GENERATOR_DIR)/main.byte
+PPX_BIN    := $(GENERATOR_DIR)/monad_ppx.native
+MLTOJS 	   := $(OCAMLPAR) $(MLTOJS_BIN) -ppx $(PPX_BIN)
+# -dsource is automatically considered by main.byte
+
+ASSEMBLY_BIN := $(GENERATOR_DIR)/assembly.byte
+ASSEMBLY     := $(ASSEMBLY_BIN)
+
+DISPLAYGEN_BIN := $(GENERATOR_DIR)/displayed_sources.byte
+DISPLAYGEN     := $(OCAMLPAR) $(DISPLAYGEN_BIN)
+
+###############################################################
+# Dependencies
+
+ifeq ($(filter clean%,$(MAKECMDGOALS)),)
+include $(JSREF_DIR)/.depends
+endif
+
+
+###############################################################
+# Rules
+
+
+
+##### Rule for dependencies
+
+$(JSREF_DIR)/.depends: $(JSREF_ML)
+	$(OCAMLDEP) -all -I $(<D) $(<D)/* > $@
+
+
+##### Rule for cmi
+%.cmi: %.ml $(MLTOJS_BIN)
+	$(MLTOJS) -mode cmi -I $(<D) -I $(STDLIB_DIR) $<
+
+%.cmi: %.mli
+	ocamlc -I $(JSREF_DIR) -I $(STDLIB_DIR) -open Stdlib $<
+
+##### Rule for log/unlog/token
+
+%.log.js: %.ml %.cmi $(MLTOJS_BIN)
+	$(MLTOJS) -mode log -I $(<D) -I $(STDLIB_DIR) $<
+
+%.unlog.js: %.ml %.cmi $(MLTOJS_BIN)
+	$(MLTOJS) -mode unlog -I $(<D) -I $(STDLIB_DIR) $<
+
+%.token.js %.mlloc.js: %.ml %.cmi $(MLTOJS_BIN)
+	$(MLTOJS) -mode token -I $(<D) -I $(STDLIB_DIR) $<
+
+%.pseudo.js: %.ml %.cmi $(MLTOJS_BIN)
+	$(MLTOJS) -mode pseudo -I $(<D) -I $(STDLIB_DIR) $<
+
+%.ptoken.js: %.ml %.cmi $(MLTOJS_BIN)
+	$(MLTOJS) -mode ptoken -I $(<D) -I $(STDLIB_DIR) $<
+
+##### Rule for lineof.js
+
+$(JSREF_DIR)/lineof.js: $(ALL_LINEOF) $(LINEOF_BIN)
+	$(LINEOF) -o $@ $(ALL_LINEOF)
+
+##### Rule for assembly.js
+
+#--LATER (optional) add as dependencies the unlog files: $(JSREF_ML:.ml=.unlog.js)
+
+$(JSREF_DIR)/assembly.js: $(ASSEMBLY_JS) $(ASEMBLY_BIN)
+	$(ASSEMBLY) -o $@ $(ASSEMBLY_JS)
+# -stdlib $(STDLIB_DIR)/stdlib.js 
+
+##### Rule for displayed_sources.js
+
+$(JSREF_DIR)/displayed_sources.js: $(ALL_DISPLAYED) $(DISPLAYGEN_BIN)
+	$(DISPLAYGEN) -o $@ $(ALL_DISPLAYED)
+
+
+#####################################################################
+# Short targets
+
+all: assembly lineof display
+
+cmi: $(JSREF_ML:.ml=.cmi) $(JSREF_MLI:.mli=.cmi) 
+
+gen: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.unlog.js) $(JSREF_ML:.ml=.token.js)
+
+ref: $(JSREF_DIR)/JsInterpreter.log.js $(JSREF_DIR)/JsInterpreter.unlog.js $(JSREF_DIR)/JsInterpreter.token.js
+
+pseudo: $(JSREF_DIR)/JsInterpreter.pseudo.js $(JSREF_DIR)/JsInterpreter.ptoken.js
+
+log: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.token.js)
+
+unlog: $(JSREF_ML:.ml=.unlog.js) 
+
+lineof: $(JSREF_DIR)/lineof.js
+
+assembly: $(JSREF_DIR)/assembly.js
+
+display: $(JSREF_DIR)/displayed_sources.js
+
+###############################################################
+# Global options
+
+.PHONY: all cmi gen ref pseudo log unlog lineof assembly display
+
+# Do not delete intermediate files.
+.SECONDARY:
+
+
+#####################################################################
+# Clean
+
+DIRTY_EXTS := cmi,.mlloc.js,token.js,log.js,unlog.js,d,ml.d,mli.d,js.pre
+
+clean:
+	rm -f $(JSREF_DIR)/lineof.js
+	rm -f $(JSREF_DIR)/assembly.js
+	bash -c "rm -f $(JSREF_DIR)/*.{$(DIRTY_EXTS)}"
+	bash -c "rm -f $(JSREF_DIR)/.depends"
diff --git a/generator/tests/jsref/ModuleExport.js b/jsref/ModuleExport.js
similarity index 100%
rename from generator/tests/jsref/ModuleExport.js
rename to jsref/ModuleExport.js
diff --git a/generator/tests/jsref/Shared.ml b/jsref/Shared.ml
similarity index 100%
rename from generator/tests/jsref/Shared.ml
rename to jsref/Shared.ml
diff --git a/generator/tests/jsref/StdMap.ml b/jsref/StdMap.ml
similarity index 100%
rename from generator/tests/jsref/StdMap.ml
rename to jsref/StdMap.ml
diff --git a/generator/tests/jsref/Translate_syntax.js b/jsref/Translate_syntax.js
similarity index 100%
rename from generator/tests/jsref/Translate_syntax.js
rename to jsref/Translate_syntax.js
diff --git a/generator/tests/jsref/Translate_syntax.mli b/jsref/Translate_syntax.mli
similarity index 100%
rename from generator/tests/jsref/Translate_syntax.mli
rename to jsref/Translate_syntax.mli
diff --git a/generator/opam b/opam
similarity index 100%
rename from generator/opam
rename to opam
diff --git a/deprecated/convert-ml-strings.pl b/tools/convert-ml-strings.pl
similarity index 100%
rename from deprecated/convert-ml-strings.pl
rename to tools/convert-ml-strings.pl
diff --git a/generator/tests/jsref/convert_monads_to_ppx.php b/tools/convert_monads_to_ppx.php
similarity index 100%
rename from generator/tests/jsref/convert_monads_to_ppx.php
rename to tools/convert_monads_to_ppx.php
diff --git a/deprecated/ml-add-cstr-annots.pl b/tools/ml-add-cstr-annots.pl
similarity index 100%
rename from deprecated/ml-add-cstr-annots.pl
rename to tools/ml-add-cstr-annots.pl