Clean up implementation, using generics
Using a Interface instead of generics.
Refactoring: Renaming the GCP class
Refactoring: Fixing some reference errors