diff --git a/gcontext.lisp b/gcontext.lisp
index afd7a77c5c87b051d69217802451f7ff75dbbaaa..43d1f51aec52f4957fdc87ead8f4952b497e6efd 100644
--- a/gcontext.lisp
+++ b/gcontext.lisp
@@ -843,12 +843,11 @@
 	    (if i
 		(setq mask (the xgcmask (logior mask
 						(the xgcmask (svref *gcontext-masks* i)))))
-	      (multiple-value-bind (extension index)
-		  (find key *gcontext-extensions* :key #'gcontext-extension-name)
+	      (let ((extension (find key *gcontext-extensions* :key #'gcontext-extension-name)))
 		(if extension
 		    (funcall (gcontext-extension-copy-function extension)
 			     src dst (svref (gcontext-local-state src)
-					    (index+ index *gcontext-data-length*)))
+					    (index+ (position extension *gcontext-extensions*) *gcontext-data-length*)))
 		  (x-type-error key 'gcontext-key))))))
 	
 	(when (plusp mask)