 
   setdefault: (key, d) ->
     if key not in @keys()
-      @value[key] = d
+      @__setitem__(key, d)
     return @value[key]
 
+  # ** Unimplemented **
+  update: ->
+  
   values: ->
     keys = @keys()
     values = []
     for key in keys
-      values.push(@value[key])
-    return values+      val = @__getitem__(key)
+      values.push(val)
+    return values
+
+  # ** Unimplemented **
+  viewitems: ->
+
+  # ** Unimplemented **
+  viewkeys: ->
+
+  # ** Unimplemented **
+  viewvalues: ->
    return key in @value

  items: ->
    items = []
    for key in @value
      
      tuple = new Tuple(key, @value[key])
      items.push(tuple)
    return items



  # Returns a shallow copy of this
  copy: ->
    copy = Dict()
    for key in @value
      val = @__getitem__(key)
      copy.__setitem__(key, val)
    return copy

  get: (key, d) ->
    if key in @value
      return @__getitem__(key)
    else
      return d

