poput implementation