Dry implementation of most stuff, nothings is tested yet.