diff --git a/lib/flex/variables.rb b/lib/flex/variables.rb
index <HASH>..<HASH> 100644
--- a/lib/flex/variables.rb
+++ b/lib/flex/variables.rb
@@ -3,9 +3,40 @@ module Flex
 
     include Structure::Mergeable
 
-    def initialize(hash=nil)
-      hash ||= {} # accepts an explicit nil
-      replace hash
+    def initialize(*hashes)
+      deep_merge! *hashes
+    end
+
+    def merge(hash)
+      super symbolize(hash)
+    end
+
+    def merge!(hash)
+      super symbolize(hash)
+    end
+
+    def store(key, val)
+      super key.to_sym, symbolize(val)
+    end
+    alias_method :[]=, :store
+
+  private
+
+    def symbolize(struct)
+      case struct
+      when Flex::Variables
+        struct
+      when Hash
+        h = Variables.new
+        struct.each do |k,v|
+          h[k.to_sym] = symbolize(v)
+        end
+        h
+      when Array
+        struct.map{|i| symbolize(i)}
+      else
+        struct
+      end
     end
 
   end
variables refactoring: auto symbolized keys and deep_merg on new