works with perfect_api