refactor FileClient