diff --git a/Makefile b/Makefile
index cc63a96e37c95c6d17660ffca4c6cf00026c42f3..7fbec98f0709cfbdd85250df58d1c3390ff373c1 100644
--- a/Makefile
+++ b/Makefile
@@ -1243,12 +1243,15 @@ bin/toplevel.opt$(EXE): $(ALL_BATCH_CMX) $(GEN_OPT_LIBS) \
 LIB_KERNEL_CMO= $(filter-out src/kernel_internals/runtime/gui_init.cmo, $(CMO))
 LIB_KERNEL_CMX= $(filter-out src/kernel_internals/runtime/gui_init.cmx, $(CMX))
 
-lib/fc/frama-c.cma: $(LIB_KERNEL_CMO) $(GEN_OPT_LIBS) $(LIB_KERNEL_CMX) lib/fc/META.frama-c
-	$(PRINT_LINKING) $@ and lib/fc/frama-c.cmxa
+lib/fc/frama-c.cma: $(LIB_KERNEL_CMO) $(GEN_BYTE_LIBS) lib/fc/META.frama-c
+	$(PRINT_LINKING) $@
 	$(MKDIR) $(FRAMAC_LIB)
-	$(OCAMLMKLIB) -o lib/fc/frama-c $(OPT_LIBS) $(LIB_KERNEL_CMO) $(LIB_KERNEL_CMX)
+	$(OCAMLMKLIB) -o lib/fc/frama-c $(BYTE_LIBS) $(LIB_KERNEL_CMO)
 
-lib/fc/frama-c.cmxa: lib/fc/frama-c.cma
+lib/fc/frama-c.cmxa: lib/fc/frama-c.cma $(GEN_OPT_LIBS) $(LIB_KERNEL_CMX)
+	$(MKDIR) $(FRAMAC_LIB)
+	$(PRINT_LINKING) $@
+	$(OCAMLMKLIB) -o lib/fc/frama-c $(OPT_LIBS) $(LIB_KERNEL_CMX)
 
 ####################
 # (Ocaml) Toplevel #
@@ -1297,14 +1300,6 @@ gui: gui-$(OCAMLBEST)
 ALL_GUI_CMO= $(ALL_CMO) $(GRAPH_GUICMO) $(GUICMO)
 ALL_GUI_CMX= $(patsubst %.cma,%.cmxa,$(ALL_GUI_CMO:.cmo=.cmx))
 
-ifeq ($(LABLGTK_VERSION),3)
-ifeq ($(NATIVE_THREADS),yes)
-THREAD=-thread
-else
-THREAD=-vmthread
-endif
-endif
-
 bin/viewer.byte$(EXE): BYTE_LIBS+= $(GRAPH_GUICMO)
 bin/viewer.byte$(EXE): $(filter-out $(GRAPH_GUICMO),$(ALL_GUI_CMO)) \
 			$(GEN_BYTE_LIBS) \
@@ -1375,7 +1370,7 @@ include Makefile.generating
 # Tests #
 #########
 
-ifeq ($(PTESTSBEST),opt)
+ifeq ($(OCAMLBEST),opt)
 PTESTS_FILES=ptests_config.cmi ptests_config.cmx ptests_config.o
 else
 PTESTS_FILES=ptests_config.cmi ptests_config.cmo
@@ -1397,9 +1392,9 @@ update_external_tests: external_tests
 
 oracles: byte opt ptests
 	$(PRINT_MAKING) oracles
-	./bin/ptests.$(PTESTSBEST)$(EXE) -make "$(MAKE)" $(PLUGIN_TESTS_LIST) \
+	./bin/ptests.$(OCAMLBEST)$(EXE) -make "$(MAKE)" $(PLUGIN_TESTS_LIST) \
 		> /dev/null 2>&1
-	./bin/ptests.$(PTESTSBEST)$(EXE) -make "$(MAKE)" -update \
+	./bin/ptests.$(OCAMLBEST)$(EXE) -make "$(MAKE)" -update \
 		$(PLUGIN_TESTS_LIST)
 
 btests: byte ./bin/ptests.byte$(EXE)
@@ -1409,13 +1404,13 @@ btests: byte ./bin/ptests.byte$(EXE)
 
 tests_dist: dist ptests
 	$(PRINT_EXEC) ptests
-	time -p ./bin/ptests.$(PTESTSBEST)$(EXE) -make "$(MAKE)" \
+	time -p ./bin/ptests.$(OCAMLBEST)$(EXE) -make "$(MAKE)" \
 		$(PLUGIN_TESTS_LIST)
 
 # test only one test suite : make suite_tests
 %_tests: opt ptests
 	$(PRINT_EXEC) ptests
-	./bin/ptests.$(PTESTSBEST)$(EXE) -make "$(MAKE)" $($*_TESTS_OPTS) $*
+	./bin/ptests.$(OCAMLBEST)$(EXE) -make "$(MAKE)" $($*_TESTS_OPTS) $*
 
 # full test suite
 wp_TESTS_OPTS=-j 1
@@ -1891,11 +1886,15 @@ clean-install:
 	$(PRINT_RM) "Installation directory"
 	$(RM) -r $(FRAMAC_LIBDIR)
 
-install-lib: clean-install
+install-lib-byte: clean-install
 	$(PRINT_INSTALL) kernel API
 	$(MKDIR) $(FRAMAC_LIBDIR)
-	$(CP) $(LIB_BYTE_TO_INSTALL) $(LIB_OPT_TO_INSTALL) $(FRAMAC_LIBDIR)
-	$(CP) $(addprefix lib/fc/,dllframa-c.so libframa-c.a frama-c.cma frama-c.a frama-c.cmxa META.frama-c)  $(FRAMAC_LIBDIR)
+	$(CP) $(LIB_BYTE_TO_INSTALL) $(FRAMAC_LIBDIR)
+	$(CP) $(addprefix lib/fc/,dllframa-c.so libframa-c.a frama-c.cma META.frama-c) $(FRAMAC_LIBDIR)
+
+install-lib-opt: install-lib-byte
+	$(CP) $(LIB_OPT_TO_INSTALL) $(FRAMAC_LIBDIR)
+	$(CP) $(addprefix lib/fc/,frama-c.a frama-c.cmxa) $(FRAMAC_LIBDIR)
 
 install-doc-code:
 	$(PRINT_INSTALL) API documentation
@@ -1907,7 +1906,7 @@ install-doc-code:
 		| (cd $(FRAMAC_DATADIR)/doc ; tar xf -))
 
 .PHONY: install
-install:: install-lib
+install:: install-lib-$(OCAMLBEST)
 	$(PRINT_MAKING) destination directories
 	$(MKDIR) $(BINDIR)
 	$(MKDIR) $(MANDIR)/man1
@@ -1986,8 +1985,8 @@ install:: install-lib
 	if [ -x bin/viewer.byte$(EXE) ] ; then \
 	  $(CP) bin/viewer.byte$(EXE) $(BINDIR)/frama-c-gui.byte$(EXE); \
 	fi
-	$(CP) bin/ptests.$(PTESTSBEST)$(EXE) \
-	      $(BINDIR)/ptests.$(PTESTSBEST)$(EXE)
+	$(CP) bin/ptests.$(OCAMLBEST)$(EXE) \
+	      $(BINDIR)/ptests.$(OCAMLBEST)$(EXE)
 	if [ -x bin/fc-config$(EXE) ] ; then \
 		$(CP) bin/fc-config$(EXE) $(BINDIR)/frama-c-config$(EXE); \
 	fi
@@ -2024,7 +2023,7 @@ install:: install-lib
 .PHONY: uninstall
 uninstall::
 	$(PRINT_RM) installed binaries
-	$(RM) $(BINDIR)/frama-c* $(BINDIR)/ptests.$(PTESTSBEST)$(EXE)
+	$(RM) $(BINDIR)/frama-c* $(BINDIR)/ptests.$(OCAMLBEST)$(EXE)
 	$(PRINT_RM) installed shared files
 	$(RM) -R $(FRAMAC_DATADIR)
 	$(PRINT_RM) installed libraries
@@ -2339,22 +2338,16 @@ PTESTS_SRC=ptests/ptests_config.ml ptests/ptests.ml
 # that does not contain a 'tests' dir
 PTESTS_CONFIG:= $(shell if test -d tests; then echo tests/ptests_config; fi)
 
-ifeq ($(NATIVE_THREADS),yes)
-PTEST_THREAD=-thread
-ptests: bin/ptests.$(PTESTSBEST)$(EXE) $(PTESTS_CONFIG)
-else
-PTEST_THREAD=-vmthread
-ptests: bin/ptests.byte$(EXE) $(PTESTS_CONFIG)
-endif
+ptests: bin/ptests.$(OCAMLBEST)$(EXE) $(PTESTS_CONFIG)
 
 bin/ptests.byte$(EXE): $(PTESTS_SRC)
 	$(PRINT_LINKING) $@
-	$(OCAMLC) -I ptests -dtypes $(PTEST_THREAD) -g -o $@ \
+	$(OCAMLC) -I ptests -dtypes -thread -g -o $@ \
 	    unix.cma threads.cma str.cma dynlink.cma $^
 
 bin/ptests.opt$(EXE): $(PTESTS_SRC)
 	$(PRINT_LINKING) $@
-	$(OCAMLOPT) -I ptests -dtypes $(PTEST_THREAD) -o $@ \
+	$(OCAMLOPT) -I ptests -dtypes -thread -o $@ \
 	    unix.cmxa threads.cmxa str.cmxa dynlink.cmxa $^
 
 GENERATED+=ptests/ptests_config.ml tests/ptests_config
diff --git a/configure.in b/configure.in
index aeb14b7922d7e3d83280cdd0252d81cf3284efb3..54f3e157cd2d36381976271133d8258f25da720b 100644
--- a/configure.in
+++ b/configure.in
@@ -411,8 +411,6 @@ if test "$OCAML_OS_TYPE" = "Win32"; then
   PLATFORM=Win32
   OCAMLWIN32=yes
   EXE=.exe
-  # OCaml on Win32 does not support vmthreads, use native ones.
-  HAS_NATIVE_THREADS=yes
 else
   OCAMLWIN32=no
   if test "$OCAML_OS_TYPE" = "Cygwin"; then
@@ -429,24 +427,6 @@ else
     fi
     EXE=
   fi
-
-  if test "$OCAMLBEST" = opt; then
-    # OCaml native threads
-    AC_MSG_CHECKING([OCaml native threads])
-    echo "let f = Thread.create (fun () -> ())" > test_native_threads.ml
-    if ($OCAMLOPT -thread -o test_native_threads unix.cmxa threads.cmxa \
-         test_native_threads.ml) 2> /dev/null ;
-    then
-      HAS_NATIVE_THREADS=yes
-      AC_MSG_RESULT([ok.]);
-    else
-      HAS_NATIVE_THREADS=no
-      AC_MSG_WARN([unsupported.]);
-    fi
-    rm -f test_native_threads*;
-  else
-    HAS_NATIVE_THREADS=no; # no native compilation anyway
-  fi
 fi
 
 # C and POSIX standard headers used by C bindings.
@@ -980,21 +960,6 @@ configure_library([LABLGTK],
 
 configure_tool([DOT],[dot],[dot not found: you should install GraphViz],no)
 
-# Checking some other things which cannot be done too early
-###########################################################
-
-# Native version of ptests can be used only if
-# - a native compiler exists
-# - native threads are usable
-
-PTESTSBEST=byte
-if test \
-     "$OCAMLBEST" = "opt" -a \
-     "$HAS_NATIVE_THREADS" = "yes"; \
-then
-   PTESTSBEST=opt;
-fi
-
 ########################
 # Plug-in dependencies #
 ########################
@@ -1043,8 +1008,6 @@ AC_SUBST(CC)
 
 AC_SUBST(EXTERNAL_PLUGINS)
 
-AC_SUBST(HAS_NATIVE_THREADS)
-AC_SUBST(PTESTSBEST)
 AC_SUBST(LABLGTK_PATH)
 
 # m4_foreach_w is not supported in some old autoconf versions.
diff --git a/share/Makefile.config.in b/share/Makefile.config.in
index 7370b7bcf278c1036f03aa5e305508f0127f0f37..ea46fb652da627f73d619c60b13601bd97ce3d7b 100644
--- a/share/Makefile.config.in
+++ b/share/Makefile.config.in
@@ -89,9 +89,7 @@ HAS_OCAML407    ?=@HAS_OCAML407@
 HAS_OCAML408    ?=@HAS_OCAML408@
 
 PLATFORM	?=@PLATFORM@
-NATIVE_THREADS	?=@HAS_NATIVE_THREADS@
 OCAMLWIN32	?=@OCAMLWIN32@
-PTESTSBEST      ?=@PTESTSBEST@
 
 DEVELOPMENT	?=@DEVELOPMENT@
 
@@ -110,9 +108,11 @@ HAS_GTKSOURCEVIEW ?=@HAS_GTKSOURCEVIEW@
 LABLGTK_VERSION ?=@LABLGTK_VERSION@
 ifeq ("$(LABLGTK_VERSION)","3")
   GTKSOURCEVIEW:=lablgtk3-sourceview3
+  THREAD:=-thread
 else
   GTKSOURCEVIEW:=\
     $(patsubst lablgtk%,$(LABLGTK).%,$(basename $(notdir @GTKSOURCEVIEW@)))
+  THREAD:=
 endif
 
 # lablgnomecanvas
diff --git a/share/Makefile.dynamic_config.external b/share/Makefile.dynamic_config.external
index e76a1aa89899864ff5f1c29830e04a997b0f855c..f6fcc64d248232b764886887fef561006096b205 100644
--- a/share/Makefile.dynamic_config.external
+++ b/share/Makefile.dynamic_config.external
@@ -27,7 +27,7 @@ export FRAMAC_BYTE=$(BINDIR)/frama-c.byte$(EXE)
 
 export FRAMAC_INCLUDES=-I "$(FRAMAC_LIBDIR)"
 
-export PTESTS=$(BINDIR)/ptests.$(PTESTSBEST)$(EXE)
+export PTESTS=$(BINDIR)/ptests.$(OCAMLBEST)$(EXE)
 
 export FRAMAC_LIB=$(FRAMAC_LIBDIR)
 export DOC_DIR=$(FRAMAC_SHARE)/doc/code
diff --git a/share/Makefile.dynamic_config.internal b/share/Makefile.dynamic_config.internal
index 6c50e7bba80c9ccea20a91c6c08111c773703ba3..425dc8b759137c69dd72c06bcaa90ba696374169 100644
--- a/share/Makefile.dynamic_config.internal
+++ b/share/Makefile.dynamic_config.internal
@@ -27,7 +27,7 @@ export FRAMAC_BYTE=$(FRAMAC_ROOT_SRCDIR)/bin/toplevel.byte$(EXE)
 
 export FRAMAC_INCLUDES=$(addprefix -I $(call winpath,$(FRAMAC_ROOT_SRCDIR))/,$(FRAMAC_SRC_DIRS) lib)
 
-export PTESTS=$(FRAMAC_ROOT_SRCDIR)/bin/ptests.$(PTESTSBEST)$(EXE)
+export PTESTS=$(FRAMAC_ROOT_SRCDIR)/bin/ptests.$(OCAMLBEST)$(EXE)
 
 export FRAMAC_LIB=$(FRAMAC_ROOT_SRCDIR)/lib/fc
 export DOC_DIR=$(FRAMAC_ROOT_SRCDIR)/doc/code
diff --git a/share/Makefile.plugin.template b/share/Makefile.plugin.template
index 63edcb5cf609d4cde8a433a6e66045459f70afbb..72cf1127a0c6d842c046fd0d3cfac9350d539557 100644
--- a/share/Makefile.plugin.template
+++ b/share/Makefile.plugin.template
@@ -456,8 +456,8 @@ $(NAME_DOCFLAGS):= $(DOC_FLAGS) $(PLUGIN_DOCFLAGS) \
 			$(addprefix -package ,$(PLUGIN_REQUIRES) $(LIBRARY_NAMES))
 
 ifeq ($(HAS_GUI),yes)
-$(NAME_GUI_BFLAGS):=$($(NAME_BFLAGS)) $(addprefix -package ,$(LIBRARY_NAMES_GUI))
-$(NAME_GUI_OFLAGS):=$($(NAME_OFLAGS)) $(addprefix -package ,$(LIBRARY_NAMES_GUI))
+$(NAME_GUI_BFLAGS):=$($(NAME_BFLAGS)) $(THREAD) $(addprefix -package ,$(LIBRARY_NAMES_GUI))
+$(NAME_GUI_OFLAGS):=$($(NAME_OFLAGS)) $(THREAD) $(addprefix -package ,$(LIBRARY_NAMES_GUI))
 $(TARGET_GUI_BFLAGS):= $(PLUGIN_LINK_GUI_BFLAGS)
 $(TARGET_GUI_OFLAGS):= $(PLUGIN_LINK_GUI_OFLAGS)
 $(NAME_DOCFLAGS) := $($(NAME_DOCFLAGS)) $(addprefix -package ,$(LIBRARY_NAMES_GUI))