diff --git a/LFS/master.sh b/LFS/master.sh
index 7fb6966..b3615e3 100755
--- a/LFS/master.sh
+++ b/LFS/master.sh
@@ -215,6 +215,7 @@ chapter6_Makefiles() {
     if [ "$vrs" != "" ] ; then
       FILE="$name-$vrs.tar.*"
       wrt_unpack2 "$FILE"
+      [[ "$OPTIMIZE" = "1" ]] && wrt_optimize "$name"
     fi
 
     # In the mount of kernel filesystems we need to set LFS
diff --git a/common/common-functions b/common/common-functions
index 3591c1b..76b913d 100644
--- a/common/common-functions
+++ b/common/common-functions
@@ -198,8 +198,6 @@ HEADER="# This file is automatically generated by jhalfs-X
 
 
 
-
-
 #----------------------------------#
 wrt_target() {                     # Create target and initialize log file
 #----------------------------------#
@@ -259,7 +257,6 @@ EOF
 }
 
 
-
 #----------------------------------#
 wrt_target_vars() {                # Target vars for hlfs (cross-build method)
 #----------------------------------#
@@ -273,6 +270,36 @@ EOF
 }
 
 
+#----------------------------------#
+wrt_optimize() {                   # Apply pkg specific opt's to build
+#----------------------------------#
+  local pkg=$1
+  local optLvl optVal OPT_VAR
+
+  optLvl=`awk -v pkg="$pkg" '$1 == pkg { print $2 }' $JHALFSDIR/opt_override`
+  if [[ "$optLvl" = "" ]] ; then
+    optLvl=$DEF_OPT_LVL;
+  fi
+
+  for OPT_VAR in CFLAGS CXXFLAGS LDFLAGS; do
+    eval optVal=\$${OPT_VAR}_$optLvl
+
+    if [[ "$optVal" != "unset" ]]; then
+     case $pkg in
+       *zlib* ) [[ "$OPT_VAR" != "LDFLAGS" ]] && optVal="$optVal -fPIC" ;;
+     esac
+(
+cat << EOF
+	@echo "export $OPT_VAR=\"$optVal\"" >> envars
+EOF
+) >> $MKFILE.tmp
+    else
+      continue
+    fi
+  done
+}
+
+
 #----------------------------------#
 wrt_run_as_su() {                  # Execute script inside time { }, footer to log file
 #----------------------------------#
diff --git a/common/config b/common/config
index cae590f..593f300 100644
--- a/common/config
+++ b/common/config
@@ -11,6 +11,10 @@ declare -r LOG=000-masterscript.log
 #--- Mount point for the build
 BUILDDIR=/mnt/build_dir
 
+# Create SBU and disk usage report  0(no)/1(yes)
+# NOTE: requires to have bc installed on the host
+REPORT=1
+
 #=== Getting packages ===
 #--- Download the source packages 0(no)/1(yes)
 GETPKG=0
@@ -30,6 +34,10 @@ SERVER=ftp://ftp.lfs-matrix.net
 #    In BLFS the Makefile can't be run automatically
 RUNMAKE=0
 
+#--- Optimize the build? 0(no)/1(yes)
+# Optimization values are set in opt_config and opt_override
+OPTIMIZE=1
+
 #--- Run test suites  [0-3]
 #  0 = none
 #  1 = only chapter06 Glibc, GCC and Binutils testsuites
@@ -41,10 +49,6 @@ RUNMAKE=0
 #      (in CLFS, alias to 2)
 TEST=1
 
-# Create SBU and disk usage report  0(no)/1(yes)
-# NOTE: requires to have bc installed on the host
-REPORT=1
-
 #--- Run the stripping phases  0(no)/1(yes)
 STRIP=1
 
diff --git a/common/func_validate_configs.sh b/common/func_validate_configs.sh
index 4b4b20d..8b260c6 100644
--- a/common/func_validate_configs.sh
+++ b/common/func_validate_configs.sh
@@ -84,10 +84,10 @@ validate_config() {          # Are the config values sane (within reason)
 inline_doc
 
   # First internal variables, then the ones that change the book's flavour, and lastly system configuration variables
-  local -r blfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG         DEPEND                TEST"
-  local -r hlfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE MODEL GRSECURITY_HOST TEST REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB             CONFIG KEYMAP         PAGE TIMEZONE LANG LC_ALL"
-  local -r clfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE METHOD  ARCH  TARGET  TEST REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB BOOT_CONFIG CONFIG KEYMAP VIMLANG PAGE TIMEZONE LANG"
-  local -r  lfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE                       TEST REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB             CONFIG        VIMLANG PAGE TIMEZONE LANG"
+  local -r blfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG         DEPEND                TEST OPTIMIZE"
+  local -r hlfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE MODEL GRSECURITY_HOST TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB             CONFIG KEYMAP         PAGE TIMEZONE LANG LC_ALL"
+  local -r clfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE METHOD  ARCH  TARGET  TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB BOOT_CONFIG CONFIG KEYMAP VIMLANG PAGE TIMEZONE LANG"
+  local -r  lfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE                       TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB             CONFIG        VIMLANG PAGE TIMEZONE LANG"
 
   local -r ERROR_MSG_pt1='The variable \"${L_arrow}${config_param}${R_arrow}\" value ${L_arrow}${BOLD}${!config_param}${R_arrow} is invalid,'
   local -r ERROR_MSG_pt2=' check the config file ${BOLD}${GREEN}\<$(echo $PROGNAME | tr [a-z] [A-Z])/config\> or \<common/config\>${OFF}'
@@ -205,6 +205,7 @@ inline_doc
       RUN_FARCE)  [[ "$COMPARE" = "1" ]] && validate_against_str "x0x x1x" ;;
       ITERATIONS) [[ "$COMPARE" = "1" ]] && validate_against_str "x2x x3x x4x x5x" ;;
       TEST)       validate_against_str "x0x x1x x2x x3x" ;;
+      OPTIMIZE)   validate_against_str "x0x x1x" ;;
       STRIP)      validate_against_str "x0x x1x" ;;
       VIMLANG)    validate_against_str "x0x x1x" ;;
       DEPEND)     validate_against_str "x0x x1x x2x" ;;
diff --git a/common/opt_config b/common/opt_config
new file mode 100644
index 0000000..bfb16bb
--- /dev/null
+++ b/common/opt_config
@@ -0,0 +1,50 @@
+#####
+#
+# optimization configuration file
+#
+#####
+
+#--- Default optimization level
+#    This level is overridden by definitions in common/def_opt_override;
+#    in this way, packages can be tuned independently.  For example,
+#    if you have trouble building a package at level 3, add it to
+#    common/def_opt_override as an alternate level.
+#
+#    Optimization levels need not be numeric; custom strings
+#    can be defined.
+#      For example: CFLAGS_myLevel="-O3 -pipe"
+#                   cat "fooPkg myLevel" >> common/def_opt_override
+DEF_OPT_LVL=3
+
+#--- Optimization level definitions
+#      Usage: - Apply optimization string at any given level
+#             - "unset" will cause the variable to be not set
+#               instead of set to null
+#--- LEVEL 0
+#      WARNING: Do not edit this level unless you know what you are
+#               doing.  By default, this is set to affect packages
+#               which may have problems with optimization.
+CFLAGS_0="unset"
+CXXFLAGS_0=$CFLAGS_0
+LDFLAGS_0="unset"
+
+
+#--- LEVEL 1
+CFLAGS_1="-O2 -pipe"
+CXXFLAGS_1=$CFLAGS_1
+LDFLAGS_1=""
+
+#--- LEVEL 2
+CFLAGS_2="-O3 -pipe"
+CXXFLAGS_2=$CFLAGS_2
+LDFLAGS_2=""
+
+#--- LEVEL 3
+CFLAGS_3="-O3 -march=pentium4 -pipe -s"
+CXXFLAGS_3=$CFLAGS_3
+LDFLAGS_3="-s"
+
+#--- LEVEL noOpt_noSymbols
+CFLAGS_noOpt_noSymbols="-s"
+CXXFLAGS_noOpt_noSymbols=$CFLAGS_noOpt_noSymbols
+LDFLAGS_noOpt_noSymbols="-s"
diff --git a/common/opt_override b/common/opt_override
new file mode 100644
index 0000000..1c7dae8
--- /dev/null
+++ b/common/opt_override
@@ -0,0 +1,4 @@
+binutils       0
+gcc            0
+glibc          0
+grub           0
diff --git a/master.sh b/master.sh
index 20331f3..6db7a42 100755
--- a/master.sh
+++ b/master.sh
@@ -56,6 +56,11 @@ source $COMMON_DIR/config
 [[ $? > 0 ]] && echo "$COMMON_DIR/conf did not load.." && exit
 [[ $VERBOSITY > 0 ]] && echo "OK"
 #
+[[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
+source $COMMON_DIR/opt_config
+[[ $? > 0 ]] && echo " $COMMON_DIR/opt_config did not load.." && exit
+[[ $VERBOSITY > 0 ]] && echo "OK"
+#
 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
 source $COMMON_DIR/func_compare.sh
 [[ $? > 0 ]] && echo "$COMMON_DIR/func_compare.sh did not load.." && exit
@@ -468,6 +473,7 @@ fi
 
 if [[ "$PWD" != "$JHALFSDIR" ]]; then
   cp $COMMON_DIR/makefile-functions $JHALFSDIR/
+  [[ "$OPTIMIZE" = "1" ]] && cp $COMMON_DIR/opt_override $JHALFSDIR/
   if [[ "$COMPARE" != "0" ]] ; then
     mkdir -p $JHALFSDIR/extras
     cp extras/* $JHALFSDIR/extras