diff --git a/Makefile b/Makefile
index 6808718173c5c904936ac11bce6cfaf14f8220ca..45f5a1c7e0e0467d087bddca858c30e251cfd600 100644
--- a/Makefile
+++ b/Makefile
@@ -466,6 +466,7 @@ STATICOBJLIST := $(ROOT_SRCDIR)/build/unix/staticobjectlist.sh
 MAKESTATICLIB := $(ROOT_SRCDIR)/build/unix/makestaticlib.sh
 MAKESTATIC    := $(ROOT_SRCDIR)/build/unix/makestatic.sh
 RECONFIGURE   := $(ROOT_SRCDIR)/build/unix/reconfigure.sh
+MAKEONEPCM    := $(ROOT_SRCDIR)/build/unix/makeonepcm.sh $(ROOT_SRCDIR)
 ifeq ($(PLATFORM),win32)
 MAKELIB       := $(ROOT_SRCDIR)/build/win/makelib.sh
 MAKECOMPDATA  := $(ROOT_SRCDIR)/build/win/compiledata.sh
@@ -619,7 +620,7 @@ endif
                 clean distclean distclean-xrootd maintainer-clean compiledata \
                 version html changelog install uninstall showbuild \
                 releasenotes staticlib static map debian redhat skip postbin \
-                showit help runtimedirs plugins-ios
+                showit help runtimedirs plugins-ios onepcm
 
 ifneq ($(findstring map, $(MAKECMDGOALS)),)
 .NOTPARALLEL:
@@ -1008,6 +1009,10 @@ changelog:
 releasenotes:
 	@$(MAKERELNOTES)
 
+onepcm: all
+	@$(MAKEONEPCM)
+	@$(MAKE)
+
 ifeq ($(BUILDX11),yes)
 ifeq ($(BUILDASIMAGE),yes)
 html: rootexecs postbin changelog releasenotes
diff --git a/build/unix/makeonepch.sh b/build/unix/makeonepch.sh
deleted file mode 100755
index de051e7f661847d435110de9ea7650847da58d9b..0000000000000000000000000000000000000000
--- a/build/unix/makeonepch.sh
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/bin/sh
-
-rm -f include/allHeaders.h include/allHeaders.h.pch include/allLinkDef.h
-
-# create allHeaders.h including all headers from the include directory
-find include -name \*.h | sed -e 's|include/|#include "|' -e 's|$|"|' \
- -e /Bits.h/d \
- -e /CocoaGuiTypes.h/d \
- -e /CocoaPrivate.h/d \
- -e /CocoaUtils.h/d \
- -e /config.h/d \
- -e /FontCache.h/d \
- -e /FTBBox.h/d \
- -e /FTBitmapGlyph.h/d \
- -e /FTCharmap.h/d \
- -e /FTCharToGlyphIndexMap.h/d \
- -e /FTContour.h/d \
- -e /FTExtrdGlyph.h/d \
- -e /FTFace.h/d \
- -e /FTFont.h/d \
- -e /FTGL.h/d \
- -e /FTGLBitmapFont.h/d \
- -e /FTGLExtrdFont.h/d \
- -e /FTGLOutlineFont.h/d \
- -e /FTGLPixmapFont.h/d \
- -e /FTGLPolygonFont.h/d \
- -e /FTGLTextureFont.h/d \
- -e /FTGlyph.h/d \
- -e /FTGlyphContainer.h/d \
- -e /FTLibrary.h/d \
- -e /FTList.h/d \
- -e /FTOutlineGlyph.h/d \
- -e /FTPixmapGlyph.h/d \
- -e /FTPoint.h/d \
- -e /FTPolyGlyph.h/d \
- -e /FTSize.h/d \
- -e /FTTextureGlyph.h/d \
- -e /FTVector.h/d \
- -e /FTVectoriser.h/d \
- -e /glew.h/d \
- -e /glxew.h/d \
- -e /wglew.h/d \
- -e /gl2ps.h/d \
- -e /BinaryOperators.h/d \
- -e /VectorUtil_Cint.h/d \
- -e /MenuLoader.h/d \
- -e /proofdp.h/d \
- -e /QuartzFillArea.h/d \
- -e /QuartzLine.h/d \
- -e /QuartzMarker.h/d \
- -e /QuartzPixmap.h/d \
- -e /QuartzText.h/d \
- -e /QuartzUtils.h/d \
- -e /QuartzWindow.h/d \
- -e /ROOTApplicationDelegate.h/d \
- -e /rootdp.h/d \
- -e /ROOTOpenGLView.h/d \
- -e /rpdconn.h/d \
- -e /rpddefs.h/d \
- -e /rpderr.h/d \
- -e /rpdp.h/d \
- -e /rpdpriv.h/d \
- -e /RtypesCint.h/d \
- -e /RtypesImp.h/d \
- -e /TAtomicCountGcc.h/d \
- -e /TAtomicCountPthread.h/d \
- -e /TChair.h/d \
- -e /TColumnView.h/d \
- -e /TGenericTable.h/d \
- -e /TGLContextPrivate.h/d \
- -e /TGLIncludes.h/d \
- -e /TGLWSIncludes.h/d \
- -e /TIndexTable.h/d \
- -e /TMemStatHook.h/d \
- -e /TMemStatMng.h/d \
- -e /TMemStatShow.h/d \
- -e /TMetaUtils.h/d \
- -e /TMonaLisaWriter.h/d \
- -e /TMySQLResult.h/d \
- -e /TMySQLStatement.h/d \
- -e /TMySQLRow.h/d \
- -e /TMySQLServer.h/d \
- -e /TODBCResult.h/d \
- -e /TODBCRow.h/d \
- -e /TODBCServer.h/d \
- -e /TODBCStatement.h/d \
- -e /TOracleResult.h/d \
- -e /TOracleRow.h/d \
- -e /TOracleServer.h/d \
- -e /TOracleStatement.h/d \
- -e /TPythia8.h/d \
- -e /TPythia8Decayer.h/d \
- -e /TResponseTable.h/d \
- -e /TTable.h/d \
- -e /TTable3Points.h/d \
- -e /TTableDescriptor.h/d \
- -e /TTableIter.h/d \
- -e /TTableMap.h/d \
- -e /TTablePadView3D.h/d \
- -e /TTablePoints.h/d \
- -e /TTableSorter.h/d \
- -e /Ttypes.h/d \
- -e /TXNetSystem.h/d \
- -e /TXSocket.h/d \
- -e /TXSocketHandler.h/d \
- -e /TXUnixSocket.h/d \
- -e /TX11GL.h/d \
- -e /Windows4Root.h/d \
- -e /X11Buffer.h/d \
- -e /X11Colors.h/d \
- -e /X11Drawable.h/d \
- -e /X11Events.h/d \
- -e /x3d.h/d \
- -e /ZIP.h/d \
- -e /ZDeflate.h/d \
- -e /ZTrees.h/d \
-> all.h
-
-mv all.h include/allHeaders.h
-
-# generate the pch
-clang++ -x c++-header -Iinclude include/allHeaders.h -o include/allHeaders.h.pch
-
-exit $?
diff --git a/build/unix/makeonepcm.sh b/build/unix/makeonepcm.sh
index 950e5feae011aa0e3123e5a0a7f91a47c5aff498..43cfe52f68f9e831a557e23d067c06680c26d05b 100755
--- a/build/unix/makeonepcm.sh
+++ b/build/unix/makeonepcm.sh
@@ -1,7 +1,137 @@
 #!/bin/sh
+#
+# Build a single large pcm for the entire basic set of ROOT libraries.
+# Script takes as optional argument the source directory path.
+#
+# Copyright (c) 2013 Rene Brun and Fons Rademakers
+# Author: Fons Rademakers, 19/2/2013
+
+srcdir=.
+if [ $# -eq 1 ]; then
+   srcdir=$1
+fi
+
+rm -f include/allHeaders.h include/allHeaders.h.pch include/allLinkDef.h
+
+# create allHeaders.h including all headers from the include directory
+find include -name \*.h | sed -e 's|include/|#include "|' -e 's|$|"|' \
+ -e /Bits.h/d \
+ -e /CocoaGuiTypes.h/d \
+ -e /CocoaPrivate.h/d \
+ -e /CocoaUtils.h/d \
+ -e /config.h/d \
+ -e /FontCache.h/d \
+ -e /FTBBox.h/d \
+ -e /FTBitmapGlyph.h/d \
+ -e /FTCharmap.h/d \
+ -e /FTCharToGlyphIndexMap.h/d \
+ -e /FTContour.h/d \
+ -e /FTExtrdGlyph.h/d \
+ -e /FTFace.h/d \
+ -e /FTFont.h/d \
+ -e /FTGL.h/d \
+ -e /FTGLBitmapFont.h/d \
+ -e /FTGLExtrdFont.h/d \
+ -e /FTGLOutlineFont.h/d \
+ -e /FTGLPixmapFont.h/d \
+ -e /FTGLPolygonFont.h/d \
+ -e /FTGLTextureFont.h/d \
+ -e /FTGlyph.h/d \
+ -e /FTGlyphContainer.h/d \
+ -e /FTLibrary.h/d \
+ -e /FTList.h/d \
+ -e /FTOutlineGlyph.h/d \
+ -e /FTPixmapGlyph.h/d \
+ -e /FTPoint.h/d \
+ -e /FTPolyGlyph.h/d \
+ -e /FTSize.h/d \
+ -e /FTTextureGlyph.h/d \
+ -e /FTVector.h/d \
+ -e /FTVectoriser.h/d \
+ -e /glew.h/d \
+ -e /glxew.h/d \
+ -e /wglew.h/d \
+ -e /gl2ps.h/d \
+ -e /BinaryOperators.h/d \
+ -e /VectorUtil_Cint.h/d \
+ -e /MenuLoader.h/d \
+ -e /proofdp.h/d \
+ -e /QuartzFillArea.h/d \
+ -e /QuartzLine.h/d \
+ -e /QuartzMarker.h/d \
+ -e /QuartzPixmap.h/d \
+ -e /QuartzText.h/d \
+ -e /QuartzUtils.h/d \
+ -e /QuartzWindow.h/d \
+ -e /ROOTApplicationDelegate.h/d \
+ -e /rootdp.h/d \
+ -e /ROOTOpenGLView.h/d \
+ -e /rpdconn.h/d \
+ -e /rpddefs.h/d \
+ -e /rpderr.h/d \
+ -e /rpdp.h/d \
+ -e /rpdpriv.h/d \
+ -e /RtypesCint.h/d \
+ -e /RtypesImp.h/d \
+ -e /TAtomicCountGcc.h/d \
+ -e /TAtomicCountPthread.h/d \
+ -e /TChair.h/d \
+ -e /TColumnView.h/d \
+ -e /TGenericTable.h/d \
+ -e /TGLContextPrivate.h/d \
+ -e /TGLIncludes.h/d \
+ -e /TGLWSIncludes.h/d \
+ -e /TIndexTable.h/d \
+ -e /TMemStatHook.h/d \
+ -e /TMemStatMng.h/d \
+ -e /TMemStatShow.h/d \
+ -e /TMetaUtils.h/d \
+ -e /TMonaLisaWriter.h/d \
+ -e /TMySQLResult.h/d \
+ -e /TMySQLStatement.h/d \
+ -e /TMySQLRow.h/d \
+ -e /TMySQLServer.h/d \
+ -e /TODBCResult.h/d \
+ -e /TODBCRow.h/d \
+ -e /TODBCServer.h/d \
+ -e /TODBCStatement.h/d \
+ -e /TOracleResult.h/d \
+ -e /TOracleRow.h/d \
+ -e /TOracleServer.h/d \
+ -e /TOracleStatement.h/d \
+ -e /TPythia8.h/d \
+ -e /TPythia8Decayer.h/d \
+ -e /TResponseTable.h/d \
+ -e /TTable.h/d \
+ -e /TTable3Points.h/d \
+ -e /TTableDescriptor.h/d \
+ -e /TTableIter.h/d \
+ -e /TTableMap.h/d \
+ -e /TTablePadView3D.h/d \
+ -e /TTablePoints.h/d \
+ -e /TTableSorter.h/d \
+ -e /Ttypes.h/d \
+ -e /TXNetSystem.h/d \
+ -e /TXSocket.h/d \
+ -e /TXSocketHandler.h/d \
+ -e /TXUnixSocket.h/d \
+ -e /TX11GL.h/d \
+ -e /Windows4Root.h/d \
+ -e /X11Buffer.h/d \
+ -e /X11Colors.h/d \
+ -e /X11Drawable.h/d \
+ -e /X11Events.h/d \
+ -e /x3d.h/d \
+ -e /ZIP.h/d \
+ -e /ZDeflate.h/d \
+ -e /ZTrees.h/d \
+> all.h
+
+mv all.h include/allHeaders.h
+
+# generate the pch to test if all includes are consistent
+clang++ -x c++-header -Iinclude include/allHeaders.h -o include/allHeaders.h.pch
 
-# create first one large pch
-./build/unix/makeonepch.sh
 err=$?
 if [ $err -ne 0 ]; then
    echo "Failed to make one pch"
@@ -12,14 +142,18 @@ fi
 rm -f include/allLinkDef.h
 
 # create allLinkDef.h including all LinkDefs
-find */inc */*/inc -name \*LinkDef\*.h | \
-  grep -v -e '^./test/' -e '^./roottest/' -e '/RooFitCore_LinkDef.h$' | \
+find $srcdir -path '*/test' -prune -o \
+             -path '*/roottest' -prune -o \
+             -path '*/include' -prune -o \
+             -follow \
+             -name '*LinkDef*.h' -print | \
+  grep -v -e '/RooFitCore_LinkDef.h$' | \
   sed -e 's|^|#include "|' -e 's|$|"|' > alldefs.h
 
 mv alldefs.h include/allLinkDef.h
 
 # generate one large pcm
 rm -f core/base/src/allDict.* lib/allDict_rdict.pcm
-core/utils/src/rootcling_tmp -1 -f core/base/src/allDict.cxx -c -Iinclude allHeaders.h include/allLinkDef.h
+core/utils/src/rootcling_tmp -1 -f core/base/src/allDict.cxx -c -I$srcdir -Iinclude allHeaders.h include/allLinkDef.h
 
 exit $?