diff --git a/babeld/Makefile b/babeld/Makefile
index 2632392..cd7f6e3 100644
--- a/babeld/Makefile
+++ b/babeld/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=babeld
 PKG_VERSION:=1.8.0
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://www.irif.fr/~jch/software/files/
diff --git a/babeld/files/babeld.init b/babeld/files/babeld.init
index 276e67f..378a8ab 100755
--- a/babeld/files/babeld.init
+++ b/babeld/files/babeld.init
@@ -11,10 +11,6 @@ OTHERCONFIGDIR="/tmp/babeld.d/"
 EXTRA_COMMANDS="status"
 EXTRA_HELP="        status Dump Babel's table to the log file."
 
-# Options to ignore for the global section (old options that are translated
-# for backward compatibility with old configuration files)
-ignored_options="carrier_sense assume_wireless no_split_horizon random_router_id multicast_address port hello_interval wired_hello_interval smoothing_half_time duplication_priority local_server conf_file conf_dir"
-
 # Append a line to the configuration file
 cfg_append() {
         local value="$1"
@@ -61,63 +57,6 @@ append_parm() {
 	append buffer "$switch $_loctmp"
 }
 
-
-# Provides backward compatibility for old option names in the global section.
-translate_option() {
-	local section="$1"
-	local old_option="$2"
-	local new_option="$3"
-	local _value
-	config_get _value "$section" "$old_option"
-	[ -z "$_value" ] && return
-	cfg_append "${new_option//_/-} $_value"
-}
-
-translate_bool() {
-	local section="$1"
-	local old_option="$2"
-	local new_option="$3"
-	local _bool
-	local _value
-	config_get_bool _bool "$section" "$old_option" 0
-	[ "$_bool" -eq 0 ] && return
-	cfg_append "${new_option//_/-} true"
-}
-
-# Adds a new interface section for setting default interface options.
-add_default_option() {
-	local option="$1"
-	local value="$2"
-	cfg_append "default ${option//_/-} $value"
-}
-
-# Global 'hello_interval' and 'wired_hello_interval' options are ignored,
-# because they have no direct equivalent: you should use
-# interface-specific settings.
-parse_old_global_options() {
-	local section="$1"
-	translate_bool   "$section" 'carrier_sense'	'link_detect'
-	translate_bool   "$section" 'random_router_id'	'random_id'
-	translate_option "$section" 'multicast_address'	'protocol_group'
-	translate_option "$section" 'port'		'protocol_port'
-	translate_option "$section" 'local_server'	'local_port'
-	translate_option "$section" 'smoothing_half_time'	'smoothing_half_life'
-	translate_option "$section" 'duplication_priority'	'allow_duplicates'
-	# These two global options are turned into default interface options.
-	local _bool
-	config_get_bool _bool "$section" 'assume_wireless' 0
-	[ "$_bool" -eq 1 ] && add_default_option "wired" "false"
-	config_get_bool _bool "$section" 'no_split_horizon' 0
-	[ "$_bool" -eq 1 ] && add_default_option "split_horizon" "false"
-        # Configure alternative configuration file and directory
-	local conf_file
-	config_get conf_file "$section" "conf_file"
-	[ -n "$conf_file" ] && OTHERCONFIGFILE="$conf_file"
-	local conf_dir
-	config_get conf_dir "$section" "conf_dir"
-	[ -n "$conf_dir" ] && OTHERCONFIGDIR="$conf_dir"
-}
-
 babel_filter() {
 	local cfg="$1"
 	local _loctmp
@@ -164,8 +103,9 @@ babel_config_cb() {
 		option_cb() {
 			local option="$1"
 			local value="$2"
-			# Ignore old options
-			list_contains ignored_options "$option" && return
+			# Ignore options that are not supposed to be given to babeld
+			[ "$option" = "conf_file" ] && return
+			[ "$option" = "conf_dir" ] && return
 			# Skip lists. They will be taken care of by list_cb
 			test "${option#*_ITEM}" != "$option" && return
 			test "${option#*_LENGTH}" != "$option" && return
@@ -175,9 +115,6 @@ babel_config_cb() {
 	"interface")
 		local _ifname
 		config_get _ifname "$section" 'ifname'
-		# Backward compatibility: try to use the section name
-		# if no "option ifname" was used.
-		[ -z "$_ifname" -a "${section:0:3}" != "cfg" ] && _ifname="$section"
 		# Try to resolve the logical interface name
 		unset interface
 		network_get_device interface "$_ifname" || interface="$_ifname"
@@ -212,27 +149,42 @@ babel_config_cb() {
 	esac
 }
 
+# Support for conf_file and conf_dir
+babel_configpaths() {
+	local cfg="$1"
+	local conf_file
+	config_get conf_file "$cfg" "conf_file"
+	[ -n "$conf_file" ] && OTHERCONFIGFILE="$conf_file"
+	local conf_dir
+	config_get conf_dir "$cfg" "conf_dir"
+	[ -n "$conf_dir" ] && OTHERCONFIGDIR="$conf_dir"
+}
+
 start_service() {
 	mkdir -p /var/lib
 	mkdir -p /var/etc
-	mkdir -p "$OTHERCONFIGDIR"
+
+	# First load the whole config file, without callbacks, so that we are
+	# aware of all "ignore" options in the second pass.  This also allows
+	# to load the configuration paths (conf_file and conf_dir).
+	config_load babeld
+
+	# Configure alternative configuration file and directory
+	config_foreach babel_configpaths "general"
 
 	# Start by emptying the generated config file
 	>"$CONFIGFILE"
 	# Import dynamic config files
+	mkdir -p "$OTHERCONFIGDIR"
 	for f in "$OTHERCONFIGDIR"/*.conf; do
 		[ -f "$f" ] && cat "$f" >> "$CONFIGFILE"
 	done
-	# First load the whole config file, without callbacks, so that we are
-	# aware of all "ignore" options in the second pass.
-	config_load babeld
+
 	# Parse general and interface sections thanks to the "config_cb()"
 	# callback.  This allows to loop over all options without having to
 	# know their name in advance.
 	config_cb() { babel_config_cb "$@"; }
 	config_load babeld
-	# Backward compatibility
-	config_foreach parse_old_global_options general
 	# Parse filters separately, since we know which options we expect
 	config_foreach babel_filter filter
 	procd_open_instance