Adding initial version, lot of things have to be reworked/finished.