v5: addressed the review comments

- renamed classes and proto messages
- added the canUpload() method
- miscellaneous