Added Viewport class and adapted other classes to use it

And here