Should work with run-room.
     ((moving-rectangle player)
      (standing-rectangle door)
      (collision collision))
-
-  (cond ((find (dungeon standing-rectangle) (keys moving-rectangle))
+  (cond ((find-if #'(lambda (x) (string= x (dungeon standing-rectangle))) (keys moving-rectangle))
         (setf (keys moving-rectangle) (delete (dungeon standing-rectangle) (keys moving-rectangle) :count 1))
         (setf (visible standing-rectangle) nil)
         (setf (active standing-rectangle) nil)
 
           (add-object (make-instance 'flying-nasobem
                                      :x (* 128 x)
                                      :y (* 128 y)) room))
+         ((eq type 'key)
+          (add-object (make-instance 'key
+                                     :x (* 128 x)
+                                     :y (* 128 y)
+                                     :dungeon arg1) room))
+         ((eq type 'door)
+          (add-object (make-instance 'door
+                                     :x (* 128 x)
+                                     :y (* 128 y)
+                                     :dungeon arg1) room))
          ((eq type 'burning-marshmallow)
           (add-object (make-instance 'burning-marshmallow
                                      :x (* 128 x)