diff --git a/lib/puppet/provider/package/yum.rb b/lib/puppet/provider/package/yum.rb
index <HASH>..<HASH> 100644
--- a/lib/puppet/provider/package/yum.rb
+++ b/lib/puppet/provider/package/yum.rb
@@ -59,7 +59,6 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
     self.debug "Ensuring => #{should}"
     wanted = @resource[:name]
     operation = :install
-    install_options = @resource[:install_options].flatten.compact.join(' ')
 
     case should
     when true, false, Symbol
@@ -108,4 +107,23 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
   def purge
     yum "-y", :erase, @resource[:name]
   end
+
+  def install_options
+    join_options(resource[:install_options])
+  end
+
+  def join_options(options)
+    return unless options
+
+    options.collect do |val|
+      case val
+      when Hash
+        val.keys.sort.collect do |k|
+          "#{k} '#{val[k]}'"
+        end.join(' ')
+      else
+        val
+      end
+    end
+  end
 end
(PUP-<I>) Use join_options command

As recommended by @adrienthebo, referencing install_options like this allows
special semantics.