   #
   # Returns promise for array.
   hkeys: (table) ->
-    Q(_.keys(@_private[@key table] or {}))
+    Q(_.keys(@data._private[@key table] or {}))
 
   # Public: Get all the values for the given hash table name
   #
   # Returns promise for array.
   hvals: (table) ->
-    Q(_.mapValues(@_private[@key table] or {}, @deserialize.bind(@)))
+    Q(_.mapValues(@data._private[@key table] or {}, @deserialize.bind(@)))
 
   # Public: Set a value in the specified hash table
   #
   # Returns promise for the value.
   hset: (table, key, value) ->
     table = @key table
-    @_private[table] = @_private[table] or {}
-    @_private[table][key] = @serialize value
+    @data._private[table] = @data._private[table] or {}
+    @data._private[table][key] = @serialize value
     Q @
 
   # Public: Get a value from the specified hash table.
   #
   # Returns: promise for the value.
   hget: (table, key) ->
-    Q(@deserialize @_private[@key table][key])
+    Q(@deserialize @data._private[@key table][key])
 
   # Public: Delete a field from a hash table
   #
   # Returns promise
   hdel: (table, key) ->
-    delete @_private[@key table][key]
+    delete @data._private[@key table][key]
     Q @
 
   # Public: Get the whole hash table as an object.
   #
   # Returns: promise for object.
   hgetall: (table) ->
-    Q(_.clone(_.mapValues(@_private[@key table], @deserialize.bind @)))
+    Q(_.clone(_.mapValues(@data._private[@key table], @deserialize.bind @)))
 
   # Public: increment the hash value by num atomically
   #

  #
  # Returns promise for int
  scard: (key) ->
    Q @_private[@key key].length

  # Public: Get and remove a random member from the set
  #
  # Returns promise for a set member
  spop: (key) ->
    key = @key key
    index = _.random 0, @_private[key].length - 1
    item = @_private[key][index]

    @_private[key].splice(1, index)

    Q item


    key = @key key

    if end < 0
      end = @data._private[key].length + end

    Q(_.map(@data._private[key].slice(start, end + 1), @deserialize.bind(@)))

  # Public: Add a member to the set specified by `key`
  #
  # Returns promise
  sadd: (key, value) ->
    key = @key key
    if @data._private[key] is undefined
      @data._private[key] = []

    #TODO behavior with objects may not be what's expected. maybe make JSON.stringify the default serializer?
    if not _.contains @data._private[key], value
      @data._private[key].push(@serialize value)

    Q @

