diff --git a/share/Makefile.plugin.template b/share/Makefile.plugin.template
index 7d699300c57861a82917dfa14ecfb1e52be630f4..df7931022fe0916c4305b2b531a9c302032d2a14 100644
--- a/share/Makefile.plugin.template
+++ b/share/Makefile.plugin.template
@@ -399,6 +399,8 @@ endif
 # Some meta-variables for compilation flags
 NAME_BFLAGS :=@PLUGIN_NAME@_BFLAGS
 NAME_OFLAGS :=@PLUGIN_NAME@_OFLAGS
+NAME_TEST_BFLAGS :=@PLUGIN_NAME@_TEST_BFLAGS
+NAME_TEST_OFLAGS :=@PLUGIN_NAME@_TEST_OFLAGS
 TARGET_OFLAGS :=@PLUGIN_NAME@_TARGET_OFLAGS
 TARGET_BFLAGS :=@PLUGIN_NAME@_TARGET_BFLAGS
 ifeq ($(HAS_GUI),yes)
@@ -434,12 +436,16 @@ endif
 PLUGIN_EXTRA_DIRS_INC:=$(patsubst %,-I $(PLUGIN_DIR)/% ,$(PLUGIN_EXTRA_DIRS))
 
 # Set the compilation flags for the plugin
-INCLUDE_FLAGS:=-I $(PLUGIN_DIR) -I $(INSTALLED_PLUGIN_DIR) \
-			$(PLUGIN_EXTRA_DIRS_INC) \
-			$(addprefix -package ,$(PLUGIN_PACKAGES) $(LIBRARY_NAMES))
-
+INCLUDE_EXT_FLAGS:=-I $(INSTALLED_PLUGIN_DIR) \
+  $(addprefix -package ,$(PLUGIN_PACKAGES) $(LIBRARY_NAMES))
+INCLUDE_FLAGS:=-I $(PLUGIN_DIR) $(PLUGIN_EXTRA_DIRS_INC) $(INCLUDE_EXT_FLAGS)
 $(NAME_BFLAGS):=$(BFLAGS) $(INCLUDE_FLAGS) $(PLUGIN_BFLAGS)
 $(NAME_OFLAGS):=$(OFLAGS) $(INCLUDE_FLAGS) $(PLUGIN_OFLAGS)
+# DO NOT include the plugin's own directory as search path for compiling
+# ml test scripts: they will be loaded in a separate phase, and will only see
+# the plugin through its static API
+$(NAME_TEST_BFLAGS):= $(BFLAGS) $(INCLUDE_EXT_FLAGS) $(PLUGIN_BFLAGS)
+$(NAME_TEST_OFLAGS):= $(OFLAGS) $(INCLUDE_EXT_FLAGS) $(PLUGIN_OFLAGS)
 
 $(TARGET_BFLAGS):= $(PLUGIN_LINK_BFLAGS)
 $(TARGET_OFLAGS):= $(PLUGIN_LINK_OFLAGS)
@@ -863,9 +869,9 @@ endif
 @PLUGIN_NAME@_TESTS_LIB_OPT_DYN:=$(PLUGIN_TESTS_LIB:%.ml=%.cmxs)
 @PLUGIN_NAME@_TESTS_LIB_BYTE:=$(PLUGIN_TESTS_LIB:%.ml=%.cmo)
 
-$(@PLUGIN_NAME@_TESTS_LIB_OPT): OFLAGS:=$($(NAME_OFLAGS)) $(@PLUGIN_NAME@_TESTS_LIB_DIR_INCLUDE)
-$(@PLUGIN_NAME@_TESTS_LIB_OPT_DYN): OFLAGS:=$($(NAME_OFLAGS)) $(@PLUGIN_NAME@_TESTS_LIB_DIR_INCLUDE)
-$(@PLUGIN_NAME@_TESTS_LIB_BYTE): BFLAGS:=$($(NAME_BFLAGS)) $(@PLUGIN_NAME@_TESTS_LIB_DIR_INCLUDE)
+$(@PLUGIN_NAME@_TESTS_LIB_OPT): OFLAGS:=$($(NAME_TEST_OFLAGS)) $(@PLUGIN_NAME@_TESTS_LIB_DIR_INCLUDE)
+$(@PLUGIN_NAME@_TESTS_LIB_OPT_DYN): OFLAGS:=$($(NAME_TEST_OFLAGS)) $(@PLUGIN_NAME@_TESTS_LIB_DIR_INCLUDE)
+$(@PLUGIN_NAME@_TESTS_LIB_BYTE): BFLAGS:=$($(NAME_TEST_BFLAGS)) $(@PLUGIN_NAME@_TESTS_LIB_DIR_INCLUDE)
 
 # [JS 2009/03/18] both .PRECIOUS are required in order to prevent 'make'
 # deletion of intermediate generated files. Such a deletion forces 'make' to