Implement first version

todo: write some tests!!!
Write some tests