diff --git a/Makefile.base b/Makefile.base
index 9b1bc4c044c9bf8b38a88ab7ecd24b25b2bb8798..fcdd36fadb09743b76a0b7a1118cfe18dd427ef4 100644
--- a/Makefile.base
+++ b/Makefile.base
@@ -57,13 +57,13 @@ CXXFLAGS = $(filter-out $(CXXUWFLAGS), $(CFLAGS)) $(CXXEXFLAGS)
 # compile and generate dependency info
 
 $(OBJC): $(BINDIR)$(MODULE)/%.o: %.c
-	$(AD)$(CC) \
+	$(AD)$(CCACHE) $(CC) \
 		-DRIOT_FILE_RELATIVE=\"$(patsubst $(RIOTBASE)/%,%,$(abspath $<))\" \
 		-DRIOT_FILE_NOPATH=\"$(notdir $<)\" \
 		$(CFLAGS) $(INCLUDES) -MD -MP -c -o $@ $(abspath $<)
 
 $(OBJCXX): $(BINDIR)$(MODULE)/%.o: %.cpp
-	$(AD)$(CXX) \
+	$(AD)$(CCACHE) $(CXX) \
 		-DRIOT_FILE_RELATIVE=\"$(patsubst $(RIOTBASE)/%,%,$(abspath $<))\" \
 		-DRIOT_FILE_NOPATH=\"$(notdir $<)\" \
 		$(CXXFLAGS) $(INCLUDES) -MD -MP -c -o $@ $(abspath $<)
diff --git a/Makefile.buildtests b/Makefile.buildtests
index 06f34bc035d70d07eef40a7a0e56462fd5886a1b..ed04493e94bf8f46919c7bc2992a35c000374a97 100644
--- a/Makefile.buildtests
+++ b/Makefile.buildtests
@@ -48,6 +48,9 @@ buildtest:
 					HOME=$${HOME} \
 					PATH=$${PATH} \
 					BOARD=$${BOARD} \
+					CCACHE=$${CCACHE} \
+					CCACHE_DIR=$${CCACHE_DIR} \
+					CCACHE_BASEDIR=$${CCACHE_BASEDIR} \
 					RIOTBASE=$${RIOTBASE} \
 					RIOTBOARD=$${RIOTBOARD} \
 					RIOTCPU=$${RIOTCPU} \
diff --git a/Makefile.include b/Makefile.include
index ec150b30f026c44a598fd8c6dcc55899746d548f..8fe6fc825b58de69a1de3d96dd9cc86c784b73e9 100644
--- a/Makefile.include
+++ b/Makefile.include
@@ -152,7 +152,12 @@ ifeq ($(origin RIOT_VERSION), undefined)
     RIOT_VERSION := "UNKNOWN (builddir: $(RIOTBASE))"
   endif
 endif
+
+ifneq (,$(RIOT_VERSION_OVERRIDE))
+export CFLAGS += -DRIOT_VERSION=\"$(RIOT_VERSION_OVERRIDE)\"
+else
 export CFLAGS += -DRIOT_VERSION=\"$(RIOT_VERSION)\"
+endif
 
 # the binaries to link
 BASELIBS += $(BINDIR)$(BOARD)_base.a
diff --git a/dist/Dockerfile b/dist/Dockerfile
index 2cddabb119be306aeb7ec5e52e27a8b84a8980f4..c485f0428086ec3867129150bc9d7cc59a2f0fb8 100644
--- a/dist/Dockerfile
+++ b/dist/Dockerfile
@@ -10,6 +10,14 @@
 # Usage:
 # 3. cd to riot root
 # 4. # docker run -i -t -u $UID -v $(pwd):/data/riotbuild riotbuild ./dist/tools/compile_test/compile_test.py
+#
+# If you want to use a persistent ccache, map a directory to '/data/ccache'
+# and set CCACHE=ccache:
+#
+# 4. # docker run -i -t -u $UID -v $(pwd):/data/riotbuild -v /tmp/riot_ccache:/data/ccache \
+#           -e CCACHE=ccache -e RIOT_VERSION_OVERRIDE=buildtest \
+#            riotbuild ./dist/tools/compile_test/compile_test.py
+#
 
 FROM ubuntu
 
@@ -23,16 +31,23 @@ RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-key FE324A81C208C89497EF
 RUN apt-get update
 RUN apt-get -y dist-upgrade
 
-RUN apt-get -y install build-essential
-RUN apt-get -y install git
-RUN apt-get -y install gcc-multilib
-RUN apt-get -y install gcc-arm-none-eabi
-RUN apt-get -y install gcc-msp430
-RUN apt-get -y install pcregrep libpcre3
-RUN apt-get -y install qemu-system-x86 python3
-RUN apt-get -y install g++-multilib
-RUN apt-get -y install gcc-avr binutils-avr avr-libc
-RUN apt-get -y install subversion curl wget python p7zip unzip
+RUN apt-get -y install build-essential \
+ git \
+ gcc-multilib \
+ gcc-arm-none-eabi \
+ gcc-msp430 \
+ pcregrep libpcre3 \
+ qemu-system-x86 python3 \
+ g++-multilib \
+ gcc-avr binutils-avr avr-libc \
+ subversion curl wget python p7zip unzip
+
+RUN wget http://launchpadlibrarian.net/206632429/ccache_3.2.2-2_amd64.deb \
+        -O /tmp/ccache_3.2.2-2_amd64.deb \
+        && dpkg -i /tmp/ccache_3.2.2-2_amd64.deb
+
+RUN mkdir -m 777 -p /data/ccache
+ENV CCACHE_DIR /data/ccache
 
 RUN mkdir -p /data/riotbuild
 WORKDIR /data/riotbuild