Refactoring:
- add more complete types, better code
Merge changes from Github.