Works, not fully tested and no documentation yet