     return new SetIterator(@)
 
   # Checks to see if this is a subset of set
-  __le__: (set) ->
-    for item in @value.keys()
-      if not set.__contains__(item)
-        return false
-    return true
+  __le__: (otherSet) ->
+    for item in @value.keys().value
+      if not otherSet.__contains__(item).value
+        return new Bool(false)
+    return new Bool(true)
 
   # Gets the len of this set
   __len__: ->
     return @value.__len__()
 
   # Checks to see if this is a proper subset of set, meaning this is a subset and not equal to set
-  __lt__: (set) ->
-    if @__eq__(set)
-      return false
-    for item in @value.keys()
-      if not set.__contains__(item)
-        return false
-    return true
+  __lt__: (otherSet) ->
+    if @__eq__(otherSet).value
+      return new Bool(false)
+    return @__le__(otherSet)
 
   # Checks to see if this is not equivalent to set
   __ne__: (set) ->
-    return not @__eq__(set)
+    return new Bool(not @__eq__(set).value)
 
   # Returns a new Set containing items from this or set
   __or__: (set) ->

  __sub__: (set) ->
    difference = @copy()
    for item in set.value.keys()
      if @__contains__(item)
        difference.value.pop(item)
    return difference



  # http://docs.python.org/library/stdtypes.html#set.discard
  discard: (elem) ->
    if @__contains__(elem).value
      @value.pop(elem)
    return

