Refactored the transport definition to a abstract class to make extensions
easier in the future