         dispatcher (btCollisionDispatcher. config)
         broad (btDbvtBroadphase.)
         solver (btSequentialImpulseConstraintSolver.)]
-    (btDiscreteDynamicsWorld. dispatcher broad solver config)))
+    (assoc (World3D. (btDiscreteDynamicsWorld. dispatcher broad solver config))
+           :config config
+           :dispatcher dispatcher
+           :broadphase broad
+           :solver solver)))
 
 (defn bullet-3d*
   [type]

                           (setWorldTransform [world-t]
                             (m/matrix-4! (. object transform) :set world-t)))))
          :else
          (.setWorldTransform body (. object transform))))))
  ; remove bodies that no longer exist
  (when entities
    (doseq [body (get-bodies screen)]
      (when-not (some #(= body (:body %)) entities)
        (cond
          (isa? (type body) btRigidBody)
          (bullet-3d! screen :remove-rigid-body body)


(def ^:private init (delay (Bullet/init)))

(defrecord World3D [object])
(defrecord Body3D [object])

; world

(defn ^:private discrete-dynamics
