diff --git a/src/mesa/drivers/dri/r300/radeon_context.c b/src/mesa/drivers/dri/r300/radeon_context.c
index 3a6bde8..10a8d35 100644
--- a/src/mesa/drivers/dri/r300/radeon_context.c
+++ b/src/mesa/drivers/dri/r300/radeon_context.c
@@ -52,6 +52,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DE
 #include "radeon_reg.h"
 
 #include "r300_state.h"
+#include "radeon_state.h"
 
 #include "utils.h"
 #include "vblank.h"
@@ -272,13 +273,15 @@ GLboolean radeonMakeCurrent(__DRIcontext
 					      &radeon->vbl_seq);
 		}
 
-		if (radeon->dri.drawable != driDrawPriv ||
-		    radeon->dri.readable != driReadPriv) {
+		if(radeon->lastStamp != driDrawPriv->lastStamp ||
+		   radeon->lastStamp != driReadPriv->lastStamp) {
 			radeon->dri.drawable = driDrawPriv;
 			radeon->dri.readable = driReadPriv;
 
-			r300UpdateWindow(radeon->glCtx);
-			r300UpdateViewportOffset(radeon->glCtx);
+			radeonSetCliprects(radeon);
+			radeon->lastStamp = driDrawPriv->lastStamp;
+			r300UpdateWindow( radeon->glCtx );
+			r300UpdateViewportOffset( radeon->glCtx );
 		}
 
 		_mesa_make_current(radeon->glCtx,
diff --git a/src/mesa/drivers/dri/r300/radeon_lock.c b/src/mesa/drivers/dri/r300/radeon_lock.c
