Moved some functionality to Method and refactored out language specifics