refactor list to provide better api