diff --git a/figl/gl.scm b/figl/gl.scm
index edbd7c8..090f9ff 100644
--- a/figl/gl.scm
+++ b/figl/gl.scm
@@ -273,10 +273,13 @@
 (define-syntax with-gl-push-matrix
   (syntax-rules ()
     ((_ body ...)
-     (begin
-       (%glPushMatrix)
-       body ...
-       (%glPopMatrix)))))
+     (call-with-values
+         (lambda ()
+           (%glPushMatrix)
+           body ...)
+       (lambda vals
+         (%glPopMatrix)
+         (apply values vals))))))
 
 (export-syntax with-gl-push-matrix)
 
