diff --git a/cint/cintex/src/CINTFunctional.cxx b/cint/cintex/src/CINTFunctional.cxx
index d1abfb23b80d9f9c4ac6fee5836552eca7838367..e4956124334735f17057160af5869395a74f68e3 100644
--- a/cint/cintex/src/CINTFunctional.cxx
+++ b/cint/cintex/src/CINTFunctional.cxx
@@ -461,7 +461,7 @@ namespace ROOT { namespace Cintex {
    }
 
    //------ Function models-------------------------------------------------------------------
-#ifdef R__B64
+#if defined(R__B64) && !defined(__ILP32__)
 #define FUNCPATTERN 0xFAFAFAFAFAFAFAFAL
 #define DATAPATTERN 0xDADADADADADADADAL
 #else
diff --git a/config/ARCHS b/config/ARCHS
index 8e5cf9e110eae6d2d99ad0498c6e43de67f42770..7793ecfc1243b9ab48121a97c9356c41e3362fa7 100644
--- a/config/ARCHS
+++ b/config/ARCHS
@@ -23,6 +23,7 @@ linuxppcgcc          for PPC Linux with gcc
 linuxppc64gcc        for PPC 64 Linux  with gcc >= 3
 linuxx8664gcc        for x86-64 Linux with gcc >= 3.x
 linuxx8664icc        for x86-64 Linux with Intel icc >=10.x
+linuxx32gcc          for x32 Linux ABI with gcc >= 4.7
 lynxos               for LynxOS with gcc
 macosx               for MacOS X >= 10.4 with gcc
 macosxicc            for MacOS X >= 10.4 with Intel icc (Intel only)
diff --git a/config/Makefile.linuxx32gcc b/config/Makefile.linuxx32gcc
new file mode 100644
index 0000000000000000000000000000000000000000..6a18f7012afcbaef68e390dbe43ef2b674c8794a
--- /dev/null
+++ b/config/Makefile.linuxx32gcc
@@ -0,0 +1,78 @@
+# -*- mode: makefile -*-
+#
+# Makefile of ROOT for x32 bit ABI ("64bit with 32bit pointers") on Linux with gcc
+
+PLATFORM      = linux
+
+DEBUGFLAGS    = -g
+OPTFLAGS      = -O2
+ifeq (debug,$(findstring debug,$(ROOTBUILD)))
+OPT           = $(DEBUGFLAGS)
+NOOPT         =
+else
+OPT           = $(OPTFLAGS)
+NOOPT         =
+endif
+ifeq ($(CXX11),yes)
+CXX11FLAGS    = -std=c++11 -Wno-deprecated-declarations
+endif
+
+# Compiler:
+CXX           = g++
+CC            = gcc
+CXXFLAGS      = -pipe -mx32 -Wshadow -Wall -W -Woverloaded-virtual \
+                -fPIC $(EXTRA_CXXFLAGS) $(CXX11FLAGS)
+CFLAGS        = -pipe -mx32 -Wshadow -Wall -W -fPIC $(EXTRA_CFLAGS)
+CINTCXXFLAGS  = -pipe -mx32 -Wall -W -Woverloaded-virtual \
+                -fPIC $(EXTRA_CXXFLAGS) $(CXX11FLAGS) \
+                -DG__REGEXP -DG__UNIX -DG__SHAREDLIB \
+                -DG__OSFDLL -DG__ROOT -DG__REDIRECTIO \
+                -DG__STD_EXCEPTION 
+CINTCFLAGS    = -pipe -mx32 -Wall -W -fPIC $(EXTRA_CFLAGS) \
+                -DG__REGEXP -DG__UNIX -DG__SHAREDLIB \
+                -DG__OSFDLL -DG__ROOT -DG__REDIRECTIO \
+                -DG__STD_EXCEPTION 
+COMPILER      = gnu
+
+# Linker:
+LD            = g++
+LDFLAGS       = -mx32 $(OPT) $(EXTRA_LDFLAGS) -Wl,--no-undefined -Wl,--as-needed
+SOFLAGS       = -shared -Wl,-soname,
+SOEXT         = so
+
+# System libraries:
+SYSLIBS       = -lm -ldl $(OSTHREADLIBDIR) $(OSTHREADLIB) \
+                $(ALLOCLIBDIR) $(ALLOCLIB) -rdynamic
+XLIBS         = $(XPMLIBDIR) $(XPMLIB) $(X11LIBDIR) -lXext -lX11
+CILIBS        = -lm -ldl -rdynamic
+CRYPTLIBS     = -lcrypt
+
+# Fortran:
+ifneq ($(findstring gfortran, $(F77)),)
+ifeq ($(F77),)
+# only needed to get default compiler in ./configure
+F77           = gfortran
+endif
+F77FLAGS      = -fPIC -mx32 -std=legacy
+ifneq ($(shell $(F77) -mx32 -print-file-name=libgfortran.$(SOEXT)),libgfortran.$(SOEXT))
+F77LIBS      := $(shell $(F77) -mx32 -print-file-name=libgfortran.$(SOEXT))
+else
+F77LIBS      := $(shell $(F77) -mx32 -print-file-name=libgfortran.a)
+endif
+F77LIBS      += $(shell $(F77) -mx32 -print-file-name=libgfortranbegin.a)
+endif
+
+ifneq ($(findstring g77, $(F77)),)
+ifeq ($(F77),)
+# only needed to get default compiler in ./configure
+F77           = g77
+endif
+F77FLAGS      = -fPIC -mx32
+ifneq ($(shell $(F77) -print-file-name=libg2c.so),libg2c.so)
+F77LIBS      := $(shell $(F77) -mx32 -print-file-name=libg2c.so) -lnsl
+else
+F77LIBS      := $(shell $(F77) -mx32 -print-file-name=libg2c.a) -lnsl
+endif
+endif
+
+# Extra
diff --git a/config/root-config.in b/config/root-config.in
index 01c5848d7bfe4c13acbc78d8e79efd032b2e7fb2..b06028ea0987d6f726fd6b37ece1c834c149c66d 100755
--- a/config/root-config.in
+++ b/config/root-config.in
@@ -313,6 +313,12 @@ linuxx8664icc)
    auxcflags=
    auxlibs="-limf -lm -ldl"
    ;;
+linuxx32gcc)
+   # x32 ABI (64 bit mode with 32 bit pointers) Linux with gcc > 4.7
+   auxcflags="-mx32"
+   auxldflags="-mx32"
+   auxlibs="-lm -ldl -rdynamic"
+   ;;
 linuxalphagcc)
    # Alpha Linux with gcc
    auxcflags=
diff --git a/configure b/configure
index 562505eb11534f4e9515ac69cffcaedcb33f9d49..dc70c2339b18a7861c632e72f7923aedc74c67f2 100755
--- a/configure
+++ b/configure
@@ -1231,6 +1231,7 @@ guess_architecture() {
         hurd*:*:*)             arch=hurddeb         ;;
         linux:ia64:*)          arch=linuxia64gcc    ;;
         linux:x86_64:*)        arch=linuxx8664gcc   ;;
+        linux:x32:*)           arch=linuxx32gcc     ;;
         linux:alpha:*)         arch=linuxalphagcc   ;;
         linux:arm*:*)          arch=linuxarm        ;;
         linux:hppa*:*)         arch=linux           ;;
@@ -1769,6 +1770,9 @@ linuxx8664*)
    logmsg "Will check 64bit libraries"
    checklinux64="yes"
    checklib64="yes" ;;
+linuxx32*)
+   logmsg "Will check x32 libraries in the future"
+   logmsg "For now expect proper libraries through configure flags" ;;
 hpuxia64acc)
    logmsg "Will check HP/UX 64bit libraries"
    checkhpux64="yes" ;;
diff --git a/core/lzma/Module.mk b/core/lzma/Module.mk
index 9c62a21e7105ea35075a528a400f91fbf6a0d4ec..45302ebb815e824bfc0c625be051cb81b1c1cebd 100644
--- a/core/lzma/Module.mk
+++ b/core/lzma/Module.mk
@@ -118,7 +118,11 @@ else
 		fi; \
 		if [ $(ARCH) = "linuxx8664gcc" ]; then \
 			LZMACC="$$LZMACC -m64"; \
-			LZMA_CFLAGS="-m64"; \
+			LZMA_CFLAGS="-mx32"; \
+		fi; \
+		if [ $(ARCH) = "linuxx32gcc" ]; then \
+			LZMACC="$$LZMACC -mx32"; \
+			LZMA_CFLAGS="-mx32"; \
 		fi; \
 		if [ $(ARCH) = "linuxicc" ]; then \
 			LZMACC="$$LZMACC -m32"; \
diff --git a/core/pcre/Module.mk b/core/pcre/Module.mk
index 81e8697e9f6099b57ded19da3dacf1dc58a3f108..8f9143d3ddebd9df267c4bd00a5552f01efac017 100644
--- a/core/pcre/Module.mk
+++ b/core/pcre/Module.mk
@@ -97,6 +97,9 @@ else
 		if [ $(ARCH) = "linuxx8664gcc" ]; then \
 			PCRE_CFLAGS="-m64"; \
 		fi; \
+		if [ $(ARCH) = "linuxx32gcc" ]; then \
+			PCRE_CFLAGS="-mx32"; \
+		fi; \
 		if [ $(ARCH) = "linuxicc" ]; then \
 			PCRE_CFLAGS="-m32"; \
 		fi; \
diff --git a/graf2d/asimage/Module.mk b/graf2d/asimage/Module.mk
index beee7e21c144b267d0572f0269ffd07cefd883ce..2c37e586e5d49d520c81504ea8cf82186cd5c862 100644
--- a/graf2d/asimage/Module.mk
+++ b/graf2d/asimage/Module.mk
@@ -158,6 +158,10 @@ else
 			ACC="$$ACC -m64"; \
 			MMX="--enable-mmx-optimization=no"; \
 		fi; \
+		if [ "$(ARCH)" = "linuxx32gcc" ]; then \
+			ACC="$$ACC -mx32"; \
+			MMX="--enable-mmx-optimization=no"; \
+		fi; \
 		if [ "$(ARCH)" = "linuxicc" ]; then \
 			ACC="$$ACC -m32"; \
 		fi; \