Some refactoring, added map2