diff --git a/Graphics/DrawingCombinators.hs b/Graphics/DrawingCombinators.hs
--- a/Graphics/DrawingCombinators.hs
+++ b/Graphics/DrawingCombinators.hs
@@ -95,10 +95,11 @@
 draw :: Draw a -> IO ()
 draw d = do
     GL.clear [GL.ColorBuffer]
-    GL.texture GL.Texture2D GL.$= GL.Enabled
-    GL.blend GL.$= GL.Enabled
-    GL.blendFunc GL.$= (GL.SrcAlpha, GL.OneMinusSrcAlpha)
-    runDrawing d
+    GL.preservingAttrib [GL.AllServerAttributes] $ do
+        GL.texture GL.Texture2D GL.$= GL.Enabled
+        GL.blend GL.$= GL.Enabled
+        GL.blendFunc GL.$= (GL.SrcAlpha, GL.OneMinusSrcAlpha)
+        runDrawing d
 
 -- | Given a bounding box, lower left and upper right in the default coordinate
 -- system (-1,-1) to (1,1), return the topmost drawing's value (with respect to
diff --git a/graphics-drawingcombinators.cabal b/graphics-drawingcombinators.cabal
--- a/graphics-drawingcombinators.cabal
+++ b/graphics-drawingcombinators.cabal
@@ -4,7 +4,7 @@
     have to go into the deep, dark world of imperative stateful
     programming just to draw stuff.  It supports 2D only (for now),
     with support drawing geometry, images, and text.
-Version: 0.41
+Version: 0.42
 Stability: experimental
 Synopsis: A functional interface to 2D drawing in OpenGL
 License: BSD3
