Added Viewport class and adapted other classes to use it