diff --git a/Makefile b/Makefile
index b88e2d5508437fea511b9506f6fd0ff04d5ff07f..a58ceef5391a8e33f53f677dda06260313944bb8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,17 @@
 ##
-## Makefile for Miosix np embedded OS
-## TFT:Terraneo Federico Technlogies
+## Makefile for Miosix embedded OS
 ##
-MAKEFILE_VERSION := 1.02
-include miosix/config/Makefile.inc
+MAKEFILE_VERSION := 1.03
+## Path to kernel directory
+KPATH := miosix
+## Path to config directory
+CONFPATH := $(realpath $(KPATH))
+include $(CONFPATH)/config/Makefile.inc
 
 ##
 ## List here subdirectories which contains makefiles
 ##
-SUBDIRS := miosix
+SUBDIRS := $(KPATH)
 
 ##
 ## List here your source files (both .s, .c and .cpp)
@@ -34,16 +37,19 @@ INCLUDE_DIRS :=
 OBJ := $(addsuffix .o, $(basename $(SRC)))
 
 ## Includes the miosix base directory for C/C++
-CXXFLAGS  := $(CXXFLAGS_BASE) -I. -Imiosix -Imiosix/arch/common \
-             -Imiosix/$(ARCH_INC) -Imiosix/$(BOARD_INC) $(INCLUDE_DIRS)
-CFLAGS    := $(CFLAGS_BASE)   -I. -Imiosix -Imiosix/arch/common \
-             -Imiosix/$(ARCH_INC) -Imiosix/$(BOARD_INC) $(INCLUDE_DIRS)
-AFLAGS    := $(AFLAGS_BASE)
-LFLAGS    := $(LFLAGS_BASE)
-DFLAGS    := -MMD -MP
-
-LINK_LIBS := $(LIBS) -L./miosix -Wl,--start-group -lmiosix -lstdc++ -lc -lm \
-    -lgcc -Wl,--end-group
+## Always include CONFPATH first, as it overrides the config file location
+CXXFLAGS := $(CXXFLAGS_BASE) -I$(CONFPATH) -I$(CONFPATH)/config/$(BOARD_INC)  \
+            -I. -I$(KPATH) -I$(KPATH)/arch/common -I$(KPATH)/$(ARCH_INC)      \
+            -I$(KPATH)/$(BOARD_INC) $(INCLUDE_DIRS)
+CFLAGS   := $(CFLAGS_BASE)   -I$(CONFPATH) -I$(CONFPATH)/config/$(BOARD_INC)  \
+            -I. -I$(KPATH) -I$(KPATH)/arch/common -I$(KPATH)/$(ARCH_INC)      \
+            -I$(KPATH)/$(BOARD_INC) $(INCLUDE_DIRS)
+AFLAGS   := $(AFLAGS_BASE)
+LFLAGS   := $(LFLAGS_BASE)
+DFLAGS   := -MMD -MP
+
+LINK_LIBS := $(LIBS) -L$(KPATH) -Wl,--start-group -lmiosix -lstdc++ -lc \
+             -lm -lgcc -Wl,--end-group
 
 all: all-recursive main
 
@@ -53,10 +59,10 @@ program:
 	$(PROGRAM_CMDLINE)
 
 all-recursive:
-	$(foreach i,$(SUBDIRS),$(MAKE) -C $(i) FOLDER="$(FOLDER) $(i)/" || exit 1;)
+	$(foreach i,$(SUBDIRS),$(MAKE) -C $(i) CONFPATH="$(CONFPATH)" || exit 1;)
 
 clean-recursive:
-	$(foreach i,$(SUBDIRS),$(MAKE) -C $(i) FOLDER="$(FOLDER) $(i)/" clean || exit 1;)
+	$(foreach i,$(SUBDIRS),$(MAKE) -C $(i) CONFPATH="$(CONFPATH)" clean || exit 1;)
 
 clean-topdir:
 	-rm -f $(OBJ) main.elf main.hex main.bin main.map $(OBJ:.o=.d)
@@ -68,7 +74,7 @@ main: main.elf
 
 main.elf: $(OBJ) all-recursive
 	@ echo "linking"
-	$(CXX) $(LFLAGS) -o main.elf $(OBJ) miosix/$(BOOT_FILE) $(LINK_LIBS)
+	$(CXX) $(LFLAGS) -o main.elf $(OBJ) $(KPATH)/$(BOOT_FILE) $(LINK_LIBS)
 
 %.o: %.s
 	$(AS) $(AFLAGS) $< -o $@
diff --git a/miosix/Makefile b/miosix/Makefile
index 174a6157206534600dfddc6000d93ea440001c25..001ad2e183c541d64af0ef556cc89eb73becdff9 100644
--- a/miosix/Makefile
+++ b/miosix/Makefile
@@ -1,10 +1,12 @@
 ##
-## Makefile for Miosix np embedded OS
-## TFT:Terraneo Federico Technlogies
+## Makefile for Miosix embedded OS
 ## This makefile builds the whole kernel
 ##
-MAKEFILE_VERSION := 1.02
-include config/Makefile.inc
+MAKEFILE_VERSION := 1.03
+## Path to kernel directory
+KPATH := .
+## CONFPATH is forwarded by the parent Makefile
+include $(CONFPATH)/config/Makefile.inc
 
 ## List of all Miosix OS source files that have no special requirements
 ## and that must be built for each architecture (both .c and .cpp)
@@ -51,10 +53,11 @@ SRC += $(ARCH_SRC)
 OBJ := $(addsuffix .o, $(basename $(SRC)))
 
 ## Includes the miosix base directory for C/C++
-CXXFLAGS := $(CXXFLAGS_BASE) -I. -Iarch/common -I$(ARCH_INC) -I$(BOARD_INC) \
-	    -DCOMPILING_MIOSIX
-CFLAGS   := $(CFLAGS_BASE)   -I. -Iarch/common -I$(ARCH_INC) -I$(BOARD_INC) \
-	    -DCOMPILING_MIOSIX
+## Always include CONFPATH first, as it overrides the config file location
+CXXFLAGS := $(CXXFLAGS_BASE) -I$(CONFPATH) -I$(CONFPATH)/config/$(BOARD_INC)  \
+            -I. -Iarch/common -I$(ARCH_INC) -I$(BOARD_INC) -DCOMPILING_MIOSIX
+CFLAGS   := $(CFLAGS_BASE)   -I$(CONFPATH) -I$(CONFPATH)/config/$(BOARD_INC)  \
+            -I. -Iarch/common -I$(ARCH_INC) -I$(BOARD_INC) -DCOMPILING_MIOSIX
 AFLAGS   := $(AFLAGS_BASE)
 DFLAGS    := -MMD -MP
 
diff --git a/miosix/_doc/textdoc/Changelog.txt b/miosix/_doc/textdoc/Changelog.txt
index 2110733cab1edcf2aae532cf07b8bf2d36608410..5a89dfb924973ea39f0f0825744117314b749279 100644
--- a/miosix/_doc/textdoc/Changelog.txt
+++ b/miosix/_doc/textdoc/Changelog.txt
@@ -1,5 +1,11 @@
 Changelog for Miosix np embedded OS
 
+- Moved board_settings.h in the config directory to allow out of git tree
+  projects to tweak those files without editing files in the Miosix git repo.
+- Added miosix/_tools/init_project_out_of_git_tree.pl script to help set up
+  out of git tree projects.
+- New makefile now supporting out of git tree projects, to help having the
+  Miosix git repo as a submodule of another git repo.
 - Updated backend_benchmark.cpp to use DevFs instead of the old Disk interface.
 - Fixed a bug in the stm32 SDIO drivers that caused the slowest clock speed
   selection, resulting in a serious performance regression when writing to
diff --git a/miosix/_examples/sad_trombone/Makefile b/miosix/_examples/sad_trombone/Makefile
index 8052dd9def8755f1d399930978c08cfb1458e7d7..3e4544e026e1ae4f1427ba5e30c1c58f847d21bd 100644
--- a/miosix/_examples/sad_trombone/Makefile
+++ b/miosix/_examples/sad_trombone/Makefile
@@ -1,14 +1,17 @@
 ##
-## Makefile for Miosix np embedded OS
-## TFT:Terraneo Federico Technlogies
+## Makefile for Miosix embedded OS
 ##
-MAKEFILE_VERSION := 1.02
-include miosix/config/Makefile.inc
+MAKEFILE_VERSION := 1.03
+## Path to kernel directory
+KPATH := miosix
+## Path to config directory
+CONFPATH := $(realpath $(KPATH))
+include $(CONFPATH)/config/Makefile.inc
 
 ##
 ## List here subdirectories which contains makefiles
 ##
-SUBDIRS := miosix
+SUBDIRS := $(KPATH)
 
 ##
 ## List here your source files (both .s, .c and .cpp)
@@ -34,16 +37,19 @@ INCLUDE_DIRS :=
 OBJ := $(addsuffix .o, $(basename $(SRC)))
 
 ## Includes the miosix base directory for C/C++
-CXXFLAGS  := $(CXXFLAGS_BASE) -I. -Imiosix -Imiosix/arch/common \
-             -Imiosix/$(ARCH_INC) -Imiosix/$(BOARD_INC) $(INCLUDE_DIRS)
-CFLAGS    := $(CFLAGS_BASE)   -I. -Imiosix -Imiosix/arch/common \
-             -Imiosix/$(ARCH_INC) -Imiosix/$(BOARD_INC) $(INCLUDE_DIRS)
-AFLAGS    := $(AFLAGS_BASE)
-LFLAGS    := $(LFLAGS_BASE)
-DFLAGS    := -MMD -MP
-
-LINK_LIBS := $(LIBS) -L./miosix -Wl,--start-group -lmiosix -lstdc++ -lc -lm \
-    -lgcc -Wl,--end-group
+## Always include CONFPATH first, as it overrides the config file location
+CXXFLAGS := $(CXXFLAGS_BASE) -I$(CONFPATH) -I$(CONFPATH)/config/$(BOARD_INC)  \
+            -I. -I$(KPATH) -I$(KPATH)/arch/common -I$(KPATH)/$(ARCH_INC)      \
+            -I$(KPATH)/$(BOARD_INC) $(INCLUDE_DIRS)
+CFLAGS   := $(CFLAGS_BASE)   -I$(CONFPATH) -I$(CONFPATH)/config/$(BOARD_INC)  \
+            -I. -I$(KPATH) -I$(KPATH)/arch/common -I$(KPATH)/$(ARCH_INC)      \
+            -I$(KPATH)/$(BOARD_INC) $(INCLUDE_DIRS)
+AFLAGS   := $(AFLAGS_BASE)
+LFLAGS   := $(LFLAGS_BASE)
+DFLAGS   := -MMD -MP
+
+LINK_LIBS := $(LIBS) -L$(KPATH) -Wl,--start-group -lmiosix -lstdc++ -lc \
+             -lm -lgcc -Wl,--end-group
 
 all: all-recursive main
 
@@ -53,10 +59,10 @@ program:
 	$(PROGRAM_CMDLINE)
 
 all-recursive:
-	$(foreach i,$(SUBDIRS),$(MAKE) -C $(i) FOLDER="$(FOLDER) $(i)/" || exit 1;)
+	$(foreach i,$(SUBDIRS),$(MAKE) -C $(i) CONFPATH="$(CONFPATH)" || exit 1;)
 
 clean-recursive:
-	$(foreach i,$(SUBDIRS),$(MAKE) -C $(i) FOLDER="$(FOLDER) $(i)/" clean || exit 1;)
+	$(foreach i,$(SUBDIRS),$(MAKE) -C $(i) CONFPATH="$(CONFPATH)" clean || exit 1;)
 
 clean-topdir:
 	-rm -f $(OBJ) main.elf main.hex main.bin main.map $(OBJ:.o=.d)
@@ -68,7 +74,7 @@ main: main.elf
 
 main.elf: $(OBJ) all-recursive
 	@ echo "linking"
-	$(CXX) $(LFLAGS) -o main.elf $(OBJ) miosix/$(BOOT_FILE) $(LINK_LIBS)
+	$(CXX) $(LFLAGS) -o main.elf $(OBJ) $(KPATH)/$(BOOT_FILE) $(LINK_LIBS)
 
 %.o: %.s
 	$(AS) $(AFLAGS) $< -o $@
diff --git a/miosix/_tools/init_project_out_of_git_tree.pl b/miosix/_tools/init_project_out_of_git_tree.pl
new file mode 100644
index 0000000000000000000000000000000000000000..c80024fa8af6970d7a9afeaa1fe40d1dc9f013e7
--- /dev/null
+++ b/miosix/_tools/init_project_out_of_git_tree.pl
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+
+# This script allows to replicate the content of the Miosix top level directory
+# outside of the Miosix git repository, in order to write an application making
+# use of Miosix without creating or altering any file in the Miosix git repo.
+# This simplifies updating the kernel with git pull and allows to have the
+# Miosix git repository as a submodule of another git repository.
+#
+# To use this script, open a shell in the directory where you want the
+# project to be created and run
+# perl <path to the kernel>/miosix/_tools/init_project_out_of_source_tree.pl
+
+use warnings;
+use strict;
+use Cwd qw(cwd abs_path);
+use File::Copy;
+use File::Copy::Recursive qw(dircopy);
+use File::Basename;
+use File::Spec;
+
+# Target directory is where the script is launched from
+my $target=cwd();
+
+# Get the kernel top level directory from the script path. The script must be
+# placed in the miosix/_tools subdirectory of the Miosix git repo
+my $source=dirname(abs_path($0));
+die "Can't locate the kernel directory\n" unless($source =~ /(\\|\/)miosix(\\|\/)_tools$/);
+$source =~ s/(\\|\/)miosix(\\|\/)_tools$//;
+die "The project directory must be outside of the kernel tree\n" if(index($target,$source)==0);
+
+die "Error: file main.cpp already exists\n" if -e "main.cpp";
+die "Error: file Makefile already exists\n" if -e "Makefile";
+die "Error: directory config already exists\n" if -e "config";
+die "Error: directory miosix_np_2 already exists\n" if -e "miosix_np_2";
+
+# Copy the Makefile fixing the KPATH and CONFPATH lines. This is what makes
+# building out the git tree possible
+sub copy_and_fixup_makefile
+{
+	my ($in_name,$out_name)=@_;
+	open(my $in, '<', $in_name) or die;
+	open(my $out, '>', $out_name) or die;
+	# KPATH must contain the path to the kernel. Said path must be relative and
+	# in the unix format (i.e: with / as path separator, not \). This is
+	# because the generated Makefile may be put in a public git repository that
+	# has the miosix kernel as a submodule, and it would be bad to put an
+	# absolute path in a git repo, or a path that is only usable from windows
+	my $relpath=File::Spec->abs2rel($source,$target);
+	$relpath =~ s/\\/\//; # Force the use of / as path separator
+	while(<$in>)
+	{
+		s/^KPATH := miosix$/KPATH := $relpath\/miosix/;
+		s/^CONFPATH := \$\(realpath \$\(KPATH\)\)$/CONFPATH := \$\(realpath \.\)/;
+		print $out "$_";
+	}
+	close($in);
+	close($out);
+}
+
+copy("$source/main.cpp","$target/main.cpp") or die;
+copy_and_fixup_makefile("$source/Makefile","$target/Makefile");
+dircopy("$source/miosix/config","$target/config") or die;
+dircopy("$source/miosix_np_2","$target/miosix_np_2") or die;
+
+print "Successfully created Miosix project\n";
+print "Target directory: $target\n";
+print "Kernel directory: $source\n";
diff --git a/miosix/config/Makefile.inc b/miosix/config/Makefile.inc
index f30993e35b4c7dc1c4c676520cff441b6cc706de..dab3ec41ae91bed4c8ad8040f7bea786d858c6fd 100644
--- a/miosix/config/Makefile.inc
+++ b/miosix/config/Makefile.inc
@@ -1,6 +1,5 @@
 ##
-## Makefile for Miosix np embedded OS
-## TFT:Terraneo Federico Technlogies
+## Makefile for Miosix embedded OS
 ## 
 ## This file contains the options required by the build system to build
 ## Miosix on various target architectures. All options start with OPT_
@@ -266,7 +265,7 @@ endif
 ## a new board or porting Miosix to a new architecture                    ##
 ############################################################################
 
-ifneq ($(MAKEFILE_VERSION),1.02)
+ifneq ($(MAKEFILE_VERSION),1.03)
     $(info You are using an incompatible makefile. Make sure it matches \
       the one distributed with the current version of the kernel)
     $(error Error)
@@ -382,7 +381,7 @@ ifeq ($(ARCH),arm7_lpc2000)
     CXXFLAGS_BASE += -D_ARCH_ARM7_LPC2000 -mcpu=arm7tdmi $(OPT_OPTIMIZATION) \
                      -ffunction-sections $(OPT_EXCEPT) -Wall -g -c
     LFLAGS_BASE   := -mcpu=arm7tdmi -Wl,--gc-sections,-Map,main.map          \
-                     -Wl,-T./miosix/$(LINKER_SCRIPT) $(OPT_EXCEPT)           \
+                     -Wl,-T$(KPATH)/$(LINKER_SCRIPT) $(OPT_EXCEPT)           \
                       $(OPT_OPTIMIZATION) -nostdlib
 
     ## Select architecture specific files
@@ -434,7 +433,7 @@ else ifeq ($(ARCH),cortexM3_stm32)
         ## error message saying that 'make program' is not supported for that
         ## board.
         ifeq ($(LINKER_SCRIPT),$(LINKER_SCRIPT_PATH)stm32_512k+64k_all_in_xram.ld)
-        PROGRAM_CMDLINE := miosix/_tools/bootloaders/stm32/pc_loader/pc_loader \
+        PROGRAM_CMDLINE := $(KPATH)/_tools/bootloaders/stm32/pc_loader/pc_loader \
         /dev/ttyUSB0 main.bin
         else
         PROGRAM_CMDLINE := stm32flash -w main.hex -v /dev/ttyUSB0
@@ -611,7 +610,7 @@ else ifeq ($(ARCH),cortexM3_stm32)
                      $(OPT_EXCEPT) -mcpu=cortex-m3 -mthumb                   \
                      $(OPT_OPTIMIZATION) -ffunction-sections -Wall -g -c
     LFLAGS_BASE   := -mcpu=cortex-m3 -mthumb -Wl,--gc-sections,-Map,main.map \
-                     -Wl,-T./miosix/$(LINKER_SCRIPT) $(OPT_EXCEPT)           \
+                     -Wl,-T$(KPATH)/$(LINKER_SCRIPT) $(OPT_EXCEPT)           \
                      $(OPT_OPTIMIZATION) -nostdlib
 
     ## Select architecture specific files
@@ -754,7 +753,7 @@ else ifeq ($(ARCH),cortexM4_stm32f4)
                      -Wall -g -c
     LFLAGS_BASE   := -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 \
                      -Wl,--gc-sections,-Map,main.map                            \
-                     -Wl,-T./miosix/$(LINKER_SCRIPT) $(OPT_EXCEPT)              \
+                     -Wl,-T$(KPATH)/$(LINKER_SCRIPT) $(OPT_EXCEPT)              \
                      $(OPT_OPTIMIZATION) -nostdlib
 
     ## Select architecture specific files
@@ -810,7 +809,7 @@ else ifeq ($(ARCH),cortexM3_stm32f2)
         ## error message saying that 'make program' is not supported for that
         ## board.
         ifeq ($(LINKER_SCRIPT),$(LINKER_SCRIPT_PATH)stm32_1m+128k_all_in_xram.ld)
-        PROGRAM_CMDLINE := miosix/_tools/bootloaders/stm32/pc_loader/pc_loader \
+        PROGRAM_CMDLINE := $(KPATH)/_tools/bootloaders/stm32/pc_loader/pc_loader \
         /dev/ttyUSB0 main.bin
         else
             PROGRAM_CMDLINE := qstlink2 -cqewV ./main.bin
@@ -852,7 +851,7 @@ else ifeq ($(ARCH),cortexM3_stm32f2)
         ## error message saying that 'make program' is not supported for that
         ## board.
         ifeq ($(LINKER_SCRIPT),$(LINKER_SCRIPT_PATH)stm32_1m+128k_code_in_xram.ld)
-        PROGRAM_CMDLINE := miosix/_tools/bootloaders/stm32/pc_loader/pc_loader \
+        PROGRAM_CMDLINE := $(KPATH)/_tools/bootloaders/stm32/pc_loader/pc_loader \
         /dev/ttyUSB1 main.bin
         else
         PROGRAM_CMDLINE := stm32flash -w main.hex -v /dev/ttyUSB1
@@ -959,7 +958,7 @@ else ifeq ($(ARCH),cortexM3_stm32f2)
                      $(OPT_EXCEPT) -mcpu=cortex-m3 -mthumb                   \
                      $(OPT_OPTIMIZATION) -ffunction-sections -Wall -g -c
     LFLAGS_BASE   := -mcpu=cortex-m3 -mthumb -Wl,--gc-sections,-Map,main.map \
-                     -Wl,-T./miosix/$(LINKER_SCRIPT) $(OPT_EXCEPT)           \
+                     -Wl,-T$(KPATH)/$(LINKER_SCRIPT) $(OPT_EXCEPT)           \
                      $(OPT_OPTIMIZATION) -nostdlib
 
     ## Select architecture specific files
@@ -1039,7 +1038,7 @@ else ifeq ($(ARCH),cortexM3_stm32l1)
                      $(OPT_EXCEPT) -mcpu=cortex-m3 -mthumb                   \
                      $(OPT_OPTIMIZATION) -ffunction-sections -Wall -g -c
     LFLAGS_BASE   := -mcpu=cortex-m3 -mthumb -Wl,--gc-sections,-Map,main.map \
-                     -Wl,-T./miosix/$(LINKER_SCRIPT) $(OPT_EXCEPT)           \
+                     -Wl,-T$(KPATH)/$(LINKER_SCRIPT) $(OPT_EXCEPT)           \
                      $(OPT_OPTIMIZATION) -nostdlib
 
     ## Select architecture specific files
diff --git a/miosix/arch/arm7_lpc2000/lpc2138_miosix_board/board_settings.h b/miosix/config/arch/arm7_lpc2000/lpc2138_miosix_board/board_settings.h
similarity index 100%
rename from miosix/arch/arm7_lpc2000/lpc2138_miosix_board/board_settings.h
rename to miosix/config/arch/arm7_lpc2000/lpc2138_miosix_board/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32/stm32f100rb_stm32vldiscovery/board_settings.h b/miosix/config/arch/cortexM3_stm32/stm32f100rb_stm32vldiscovery/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32/stm32f100rb_stm32vldiscovery/board_settings.h
rename to miosix/config/arch/cortexM3_stm32/stm32f100rb_stm32vldiscovery/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32/stm32f103ve_mp3v2/board_settings.h b/miosix/config/arch/cortexM3_stm32/stm32f103ve_mp3v2/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32/stm32f103ve_mp3v2/board_settings.h
rename to miosix/config/arch/cortexM3_stm32/stm32f103ve_mp3v2/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32/stm32f103ve_strive_mini/board_settings.h b/miosix/config/arch/cortexM3_stm32/stm32f103ve_strive_mini/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32/stm32f103ve_strive_mini/board_settings.h
rename to miosix/config/arch/cortexM3_stm32/stm32f103ve_strive_mini/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32/stm32f103ze_redbull_v2/board_settings.h b/miosix/config/arch/cortexM3_stm32/stm32f103ze_redbull_v2/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32/stm32f103ze_redbull_v2/board_settings.h
rename to miosix/config/arch/cortexM3_stm32/stm32f103ze_redbull_v2/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32/stm32f103ze_stm3210e-eval/board_settings.h b/miosix/config/arch/cortexM3_stm32/stm32f103ze_stm3210e-eval/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32/stm32f103ze_stm3210e-eval/board_settings.h
rename to miosix/config/arch/cortexM3_stm32/stm32f103ze_stm3210e-eval/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32f2/stm32f205rg_sony-newman/board_settings.h b/miosix/config/arch/cortexM3_stm32f2/stm32f205rg_sony-newman/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32f2/stm32f205rg_sony-newman/board_settings.h
rename to miosix/config/arch/cortexM3_stm32f2/stm32f205rg_sony-newman/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32f2/stm32f207ig_stm3220g-eval/board_settings.h b/miosix/config/arch/cortexM3_stm32f2/stm32f207ig_stm3220g-eval/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32f2/stm32f207ig_stm3220g-eval/board_settings.h
rename to miosix/config/arch/cortexM3_stm32f2/stm32f207ig_stm3220g-eval/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32f2/stm32f207ze_als_camboard/board_settings.h b/miosix/config/arch/cortexM3_stm32f2/stm32f207ze_als_camboard/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32f2/stm32f207ze_als_camboard/board_settings.h
rename to miosix/config/arch/cortexM3_stm32f2/stm32f207ze_als_camboard/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32f2/stm32f207zg_EthBoardV2/board_settings.h b/miosix/config/arch/cortexM3_stm32f2/stm32f207zg_EthBoardV2/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32f2/stm32f207zg_EthBoardV2/board_settings.h
rename to miosix/config/arch/cortexM3_stm32f2/stm32f207zg_EthBoardV2/board_settings.h
diff --git a/miosix/arch/cortexM3_stm32l1/stm32l151c8_als_mainboard/board_settings.h b/miosix/config/arch/cortexM3_stm32l1/stm32l151c8_als_mainboard/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM3_stm32l1/stm32l151c8_als_mainboard/board_settings.h
rename to miosix/config/arch/cortexM3_stm32l1/stm32l151c8_als_mainboard/board_settings.h
diff --git a/miosix/arch/cortexM4_stm32f4/stm32f407vg_bitsboard/board_settings.h b/miosix/config/arch/cortexM4_stm32f4/stm32f407vg_bitsboard/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM4_stm32f4/stm32f407vg_bitsboard/board_settings.h
rename to miosix/config/arch/cortexM4_stm32f4/stm32f407vg_bitsboard/board_settings.h
diff --git a/miosix/arch/cortexM4_stm32f4/stm32f407vg_stm32f4discovery/board_settings.h b/miosix/config/arch/cortexM4_stm32f4/stm32f407vg_stm32f4discovery/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM4_stm32f4/stm32f407vg_stm32f4discovery/board_settings.h
rename to miosix/config/arch/cortexM4_stm32f4/stm32f407vg_stm32f4discovery/board_settings.h
diff --git a/miosix/arch/cortexM4_stm32f4/stm32f429zi_stm32f4discovery/board_settings.h b/miosix/config/arch/cortexM4_stm32f4/stm32f429zi_stm32f4discovery/board_settings.h
similarity index 100%
rename from miosix/arch/cortexM4_stm32f4/stm32f429zi_stm32f4discovery/board_settings.h
rename to miosix/config/arch/cortexM4_stm32f4/stm32f429zi_stm32f4discovery/board_settings.h
diff --git a/miosix/config/miosix_settings.h b/miosix/config/miosix_settings.h
index a2deb70206efa3ab6e328c83449f9cb99585916a..3ea473331d528c4499fcc3468438488a88ef4ed9 100644
--- a/miosix/config/miosix_settings.h
+++ b/miosix/config/miosix_settings.h
@@ -28,6 +28,10 @@
 #ifndef MIOSIX_SETTINGS_H
 #define MIOSIX_SETTINGS_H
 
+// Before you can compile the kernel you have to configure it by editing this
+// file. After that, comment out this line to disable the reminder error.
+#error This error is a reminder that you have not edited miosix_settings.h yet.
+
 /**
  * \file miosix_settings.h
  * NOTE: this file contains ONLY configuration options that are not dependent