s: dont take data by ref
o: remove std::touple dep