diff --git a/haskgame.cabal b/haskgame.cabal
--- a/haskgame.cabal
+++ b/haskgame.cabal
@@ -1,5 +1,5 @@
 Name:                haskgame
-Version:             0.0.5
+Version:             0.0.6
 Cabal-Version:       >= 1.2
 Synopsis:            Haskell game library.
 Category:            graphics
diff --git a/src/Graphics/UI/HaskGame.hs b/src/Graphics/UI/HaskGame.hs
--- a/src/Graphics/UI/HaskGame.hs
+++ b/src/Graphics/UI/HaskGame.hs
@@ -77,5 +77,5 @@
 surfaceSize surface = Vector2 (SDL.surfaceGetWidth surface)
                               (SDL.surfaceGetHeight surface)
 
-setVideoMode :: Int -> Int -> Int -> IO Surface
-setVideoMode xres yres colorDepth = SDL.setVideoMode xres yres colorDepth [SDL.DoubleBuf]
+setVideoMode :: Vector2 Int -> Int -> IO Surface
+setVideoMode (Vector2 xres yres) colorDepth = SDL.setVideoMode xres yres colorDepth [SDL.DoubleBuf]
diff --git a/src/Graphics/UI/HaskGame/Vector2.hs b/src/Graphics/UI/HaskGame/Vector2.hs
--- a/src/Graphics/UI/HaskGame/Vector2.hs
+++ b/src/Graphics/UI/HaskGame/Vector2.hs
@@ -2,12 +2,14 @@
 
 module Graphics.UI.HaskGame.Vector2
     (Vector2(Vector2)
-    ,first,second
+    ,vector2
+    ,first,second,(***),both
     ,fst,snd)
 where
 
 import Prelude hiding (fst, snd)
 import Control.Applicative(Applicative(..), liftA2)
+import Control.Monad(join)
 
 data Vector2 a = Vector2 !a !a
   -- Note the Ord instance is obviously not a mathematical one
@@ -28,6 +30,15 @@
 
 second :: Endo a -> Endo (Vector2 a)
 second f (Vector2 x y) = Vector2 x (f y)
+
+(***) :: Endo a -> Endo a -> Endo (Vector2 a)
+(f *** g) (Vector2 x y) = Vector2 (f x) (g y)
+
+vector2 :: (a -> a -> b) -> Vector2 a -> b
+vector2 f (Vector2 x y) = f x y
+
+both :: Endo a -> Endo (Vector2 a)
+both = join (***)
 
 instance Functor Vector2 where
   fmap f (Vector2 x y) = Vector2 (f x) (f y)
