diff --git a/bin/htmlproofer b/bin/htmlproofer
index 0b593800..51f3e95e 100755
--- a/bin/htmlproofer
+++ b/bin/htmlproofer
@@ -77,18 +77,24 @@ Mercenary.program(:htmlproofer) do |p|
options[:error_sort] = opts['error-sort'].to_sym unless opts['error-sort'].nil?
options[:log_level] = opts['log_level'].to_sym unless opts['log_level'].nil?
- # FIXME: this is gross
- options[:validation] = {}
- options[:validation][:report_script_embeds] = opts['report_script_embeds']
- options[:validation][:report_missing_names] = opts['report_missing_names']
- options[:validation][:report_invalid_tags] = opts['report_invalid_tags']
-
- options[:typhoeus] = {}
- options[:typhoeus] = HTMLProofer::Configuration.parse_json_option('typhoeus_config', opts['typhoeus_config'])
-
- options[:cache] = {}
- options[:cache][:timeframe] = opts['timeframe'] unless opts['timeframe'].nil?
- options[:cache][:storage_dir] = opts['storage_dir'] unless opts['storage_dir'].nil?
+ options[:validation] = HTMLProofer::Configuration::VALIDATION_DEFAULTS.dup
+ options[:validation][:report_script_embeds] = opts['report_script_embeds'] unless opts['report_script_embeds'].nil?
+ options[:validation][:report_missing_names] = opts['report_missing_names'] unless opts['report_missing_names'].nil?
+ options[:validation][:report_invalid_tags] = opts['report_invalid_tags'] unless opts['report_invalid_tags'].nil?
+
+ unless opts['typhoeus_config'].nil?
+ options[:typhoeus] = HTMLProofer::Configuration.parse_json_option('typhoeus_config', opts['typhoeus_config'])
+ end
+
+ unless opts['timeframe'].nil?
+ options[:cache] ||= {}
+ options[:cache][:timeframe] = opts['timeframe'] unless opts['timeframe'].nil?
+ end
+
+ unless opts['storage_dir'].nil?
+ options[:cache] ||= {}
+ options[:cache][:storage_dir] = opts['storage_dir'] unless opts['storage_dir'].nil?
+ end
options[:http_status_ignore] = Array(options[:http_status_ignore]).map(&:to_i)