added abstraction of transportlayer