GameObject refactored entirely