diff --git a/SoccerFun/UI/GL.hs b/SoccerFun/UI/GL.hs
--- a/SoccerFun/UI/GL.hs
+++ b/SoccerFun/UI/GL.hs
@@ -72,10 +72,7 @@
 		writeIORef tape tape'
 		GL.postRedisplay $ Just window
 		let actions = mapMaybe logRefereeAction refereeActions
-		when (not $ GameOver `elem` refereeActions) $ do
-			if null actions
-				then GL.addTimerCallback 30 gameLoop
-				else GL.addTimerCallback 1000 gameLoop
+		when (not $ GameOver `elem` refereeActions) $ GL.addTimerCallback 30 gameLoop
 		mapM_ putStrLn actions
 
 	reshape s@(GL.Size w h) = do
@@ -126,6 +123,16 @@
 		GL.renderPrimitive GL.LineStrip $ do -- middle line
 			vertex2 (l/2,0)
 			vertex2 (l/2,w)
+		GL.renderPrimitive GL.LineStrip $ do -- west penalty area
+			vertex2 (0, w/2 + radiusPenaltyArea)
+			vertex2 (penaltyAreaDepth, w/2 + radiusPenaltyArea)
+			vertex2 (penaltyAreaDepth, w/2 - radiusPenaltyArea)
+			vertex2 (0, w/2 - radiusPenaltyArea)
+		GL.renderPrimitive GL.LineStrip $ do -- east penalty area
+			vertex2 (l, w/2 + radiusPenaltyArea)
+			vertex2 (l - penaltyAreaDepth, w/2 + radiusPenaltyArea)
+			vertex2 (l - penaltyAreaDepth, w/2 - radiusPenaltyArea)
+			vertex2 (l, w/2 - radiusPenaltyArea)
 		GL.preservingMatrix $ do -- centre circle and centre spot
 			GL.translate $ vector2 (l/2,w/2)
 			GL.renderPrimitive GL.LineLoop $ circle radiusCentreCircle 23
diff --git a/SoccerFunGL.cabal b/SoccerFunGL.cabal
--- a/SoccerFunGL.cabal
+++ b/SoccerFunGL.cabal
@@ -1,5 +1,5 @@
 Name:           SoccerFunGL
-Version:        0.5
+Version:        0.5.1
 Copyright:      (c) 2010, Jan Rochel
 License:        BSD3
 License-File:   LICENSE
@@ -24,7 +24,7 @@
     binary >= 0.5 && < 0.6,
     GLUT >= 2.2 && < 2.3,
     OpenGL >= 2.4 && < 2.5,
-    SoccerFun >= 0.5 && < 0.6,
+    SoccerFun >= 0.5.1 && < 0.6,
     process >= 1.0 && < 1.1
   Exposed-Modules:
     SoccerFun.UI.GL
