reimplement api changes