diff --git a/src/dynamic_body.cpp b/src/dynamic_body.cpp
index 69e9cda..503fc04 100644
--- a/src/dynamic_body.cpp
+++ b/src/dynamic_body.cpp
@@ -29,6 +29,10 @@ void DynamicBody::SetRotation(const matrix4x4d &r) {
 }
 
 void DynamicBody::SetMassDistributionFromCollMesh(const CollMesh* m) {
+  /*
+   * XXX: This is silly. the radius of mass distribution should be
+   * defined on the model, not cooked up in some stupid way.
+   */
   vector3d min = vector3d(FLT_MAX);
   vector3d max = vector3d(-FLT_MAX);
   for(int i = 0; i < 3*m->nv; i += 3) {
@@ -39,7 +43,11 @@ void DynamicBody::SetMassDistributionFromCollMesh(const CollMesh* m) {
     max.y = MAX(m->pVertex[i+1],  max.y);
     max.z = MAX(m->pVertex[i+2],  max.z);
   }
-  dMassSetBox(&m_mass, 1, max.x-min.x, max.y-min.y, max.z-min.z);
+  float size = ((max.x-min.x) + (max.y-min.y) + (max.z-min.z)) / 6.0f;
+  printf("size %f\n", size);
+  dMassSetSphere(&m_mass, 1, size);
+  /* Boxes go mental after a while due to inertia tensor being fishy. */
+  //dMassSetBox(&m_mass, 1, max.x-min.x, max.y-min.y, max.z-min.z);
   dBodySetMass(m_body, &m_mass);
 }
 
@@ -53,19 +61,6 @@ DynamicBody::~DynamicBody(void) {
   dBodyDestroy(m_body);
 }
 
-void DynamicBody::TimeStepUpdate(const float timeStep) {
-  /*
-   * XXX Horrible hack.
-   * Prevent large ang velocities because ode hates them!
-   */
-  const dReal* v = dBodyGetAngularVel(m_body);
-  vector3d vel;
-  vel.x = CLAMP(v[0], -50.0, 50.0);
-  vel.y = CLAMP(v[1], -50.0, 50.0);
-  vel.z = CLAMP(v[2], -50.0, 50.0);
-  dBodySetAngularVel(m_body, vel.x, vel.y, vel.z);
-}
-
 vector3d DynamicBody::GetVelocity(void) {
   const dReal* v = dBodyGetLinearVel(m_body);
   return vector3d(v[0], v[1], v[2]);
diff --git a/src/dynamic_body.h b/src/dynamic_body.h
index 59081ca..e866c5f 100644
--- a/src/dynamic_body.h
+++ b/src/dynamic_body.h
@@ -18,7 +18,6 @@ public:
   virtual bool OnCollision(Body* b, Uint32 flags) { return true; }
   vector3d GetAngularMomentum(void);
   void SetMassDistributionFromCollMesh(const CollMesh* m);
-  virtual void TimeStepUpdate(const float timeStep);
   virtual void Disable(void);
   virtual void Enable(void);
 
diff --git a/src/ship.cpp b/src/ship.cpp
index 5446f1b..cd5226a 100644
--- a/src/ship.cpp
+++ b/src/ship.cpp
@@ -98,7 +98,6 @@ void Ship::CalcStats(shipstats_t* stats) {
 }
 
 void Ship::TimeStepUpdate(const float timeStep) {
-  DynamicBody::TimeStepUpdate(timeStep);
   dockingTimer = (dockingTimer-timeStep > 0 ? dockingTimer-timeStep : 0);
   /* ODE tri mesh likes to know our old position. */
   TriMeshUpdateLastPos();