diff --git a/build/unix/makeonepcm.sh b/build/unix/makeonepcm.sh
index cdb4d2cdada9f91c6d3785e5f25acc6717b3cc0a..9125efdf84aee6e2b85bb5d7c6527eb75ff86a3b 100755
--- a/build/unix/makeonepcm.sh
+++ b/build/unix/makeonepcm.sh
@@ -197,6 +197,8 @@ mv alldefs.h include/allLinkDef.h
 rm -f allDict.* lib/allDict_rdict.pcm
 core/utils/src/rootcling_tmp -1 -f allDict.cxx -c $cxxflags -I$srcdir allHeaders.h include/allLinkDef.h
 
+mv lib/allDict.pch etc/cling/
+
 # actually we won't need the allDict.[h,cxx] files
 rm -f allDict.*
 
diff --git a/core/meta/src/TCling.cxx b/core/meta/src/TCling.cxx
index fbd31cf37076be81fb96890f5fd3f62ee594b10c..dbc9967f76297dd9bbf429f1fad261804e96f109 100644
--- a/core/meta/src/TCling.cxx
+++ b/core/meta/src/TCling.cxx
@@ -666,8 +666,10 @@ TCling::TCling(const char *name, const char *title)
 
    fTemporaries = new std::vector<cling::StoredValueRef>();
    std::string interpInclude = ROOT::TMetaUtils::GetInterpreterExtraIncludePath(false);
+   std::string pchFilename = interpInclude.substr(2) + "/cling/ROOT.pch";
    const char* interpArgs[]
-      = {"cling4root", interpInclude.c_str(), "-Xclang", "-fmodules"};
+      = {"cling4root", interpInclude.c_str(), "-include-pch", pchFilename.c_str()};
+         //"-Xclang", "-fmodules"};
 
    fInterpreter = new cling::Interpreter(sizeof(interpArgs) / sizeof(char*),
                                          interpArgs,