quite a few changes.. still experimental