splitted old and new implementations