Restructure the gem
Add initial implementation