First Version.
Is working but not fully tested.