diff --git a/gl/gl_mgr.sv b/gl/gl_mgr.sv
index 6dbc9d027a4147fb5455eafe1c2f68a6cfe5ede5..73f6eaa1def2b390ee7764065a4f7888fe0449f0 100644
--- a/gl/gl_mgr.sv
+++ b/gl/gl_mgr.sv
@@ -106,8 +106,11 @@ module gl_mgr (
 	// Paint Write
 	logic fb_PAINT_REQ;
 	logic [9:0] fb_PAINT_X, fb_PAINT_Y;
+	logic [9:0] fb_PAINT_X_san, fb_PAINT_Y_san;
 	logic [15:0] fb_PAINT_RGB16;
 	logic fb_PAINT_READY;
+	assign fb_PAINT_X_san = (fb_PAINT_X>10'd639) ? 10'd639 : fb_PAINT_X;
+	assign fb_PAINT_Y_san = (fb_PAINT_Y>10'd479) ? 10'd479 : fb_PAINT_Y;
 	gl_frame_buffer frame_buffer(
 		.CLK          (CLOCK),
 		.RESET        (RESET),
@@ -122,8 +125,8 @@ module gl_mgr (
 		.GL_DATA      (fb_GL_RGB),
 		.GL_READY     (fb_GL_READY),
 		.PAINT_REQ    (fb_PAINT_REQ),
-		.PAINT_X      (fb_PAINT_X),
-		.PAINT_Y      (fb_PAINT_Y),
+		.PAINT_X      (fb_PAINT_X_san),
+		.PAINT_Y      (fb_PAINT_Y_san),
 		.PAINT_RGB16  (fb_PAINT_RGB16),
 		.PAINT_READY  (fb_PAINT_READY),
 		.BUF_ACTIVE   (paint_buffer),
diff --git a/gl/painters/gl_painter_circle.sv b/gl/painters/gl_painter_circle.sv
index 408c37c07090c953e76392c96ccd076419cbc3d7..214025cdc7c619a74cfba2da2c241e87be18b608 100644
--- a/gl/painters/gl_painter_circle.sv
+++ b/gl/painters/gl_painter_circle.sv
@@ -37,6 +37,7 @@ module gl_painter_circle (
 	assign fb_PAINT_RGB16 = color;
 	assign RC_ADDR = {fb_PAINT_X, fb_PAINT_Y[8:0], PAINT_BUFFER};
 	assign RC_DATA_WR = 1'b1;
+	assign RC_WE = fb_PAINT_REQ;
 
 	always_ff @(posedge CLOCK) begin
 		if(RESET | ~EN) begin
@@ -72,7 +73,6 @@ module gl_painter_circle (
 		xlen_in = xlen;
 		color_in = color;
 		DONE = 1'b0;
-		RC_WE = 1'b0;
 		paint_req_in = 1'b0;
 
 		case (state)
@@ -88,7 +88,6 @@ module gl_painter_circle (
 
 			s_axis: begin
 				paint_req_in = 1'b1;
-				RC_WE = 1'b1;
 				if(fb_PAINT_READY) begin
 					// Value written, move to next pixel
 					x_in = x + 1;
@@ -127,7 +126,6 @@ module gl_painter_circle (
 
 			s_paint: begin
 				paint_req_in = 1'b1;
-				RC_WE = 1'b1;
 				if(fb_PAINT_READY) begin
 					// Value written, move to next pixel
 					x_in = x + 1;
diff --git a/gl/painters/gl_painter_image.sv b/gl/painters/gl_painter_image.sv
index 61a585201b6aaed94b7101642ee5f860bb3d6bb0..a7d53d27dd6654c5d1195689ea502fbe08547550 100644
--- a/gl/painters/gl_painter_image.sv
+++ b/gl/painters/gl_painter_image.sv
@@ -50,6 +50,7 @@ module gl_painter_image (
 
 	assign RC_ADDR = {fb_PAINT_X, fb_PAINT_Y[8:0], PAINT_BUFFER};
 	assign RC_DATA_WR = 1'b1;
+	assign RC_WE = fb_PAINT_REQ;
 
 	assign fb_GL_ADDR = img_ptr;
 
@@ -84,7 +85,6 @@ module gl_painter_image (
 		color_in = color;
 		i_in = i;
 		DONE = 1'b0;
-		RC_WE = 1'b0;
 		paint_req_in = 1'b0;
 		read_req_in = 1'b0;
 		img_ptr_in = img_ptr;
@@ -132,7 +132,6 @@ module gl_painter_image (
 
 			s_paint: begin
 				paint_req_in = 1'b1;
-				RC_WE = 1'b1;
 				if(fb_PAINT_READY) begin
 					// Value written, move to next location
 					i_in = i + 1;
diff --git a/gl/painters/gl_painter_polygon.sv b/gl/painters/gl_painter_polygon.sv
index 9647b64733d36e4f52cef2d59316b4c14a2433e2..a9b50a1deb3ef50b483443f3da5aab5d74c3c251 100644
--- a/gl/painters/gl_painter_polygon.sv
+++ b/gl/painters/gl_painter_polygon.sv
@@ -35,8 +35,10 @@ module gl_painter_polygon (
 	assign fb_PAINT_RGB16 = C0;
 	assign fb_PAINT_X = x;
 	assign fb_PAINT_Y = y;
+
 	assign RC_ADDR = {fb_PAINT_X, fb_PAINT_Y[8:0], PAINT_BUFFER};
 	assign RC_DATA_WR = 1'b1;
+	assign RC_WE = fb_PAINT_REQ;
 
 	// Inclined line scanner instances
 	logic [9:0] l_x1, l_y1, l_x2, l_y2, r_x1, r_y1, r_x2, r_y2;
@@ -81,7 +83,6 @@ module gl_painter_polygon (
 		y_in = y;
 		xbeg_in = xbeg;
 		DONE = 1'b0;
-		RC_WE = 1'b0;
 		paint_req_in = 1'b0;
 		l_lim_in = l_lim;
 		r_lim_in = r_lim;
@@ -96,7 +97,6 @@ module gl_painter_polygon (
 
 			s_scan_left: begin
 				paint_req_in = 1'b1;
-				RC_WE = 1'b1;
 				if(fb_PAINT_READY) begin
 					// Value written, move to next pixel
 					x_in = x - 1;
@@ -111,7 +111,6 @@ module gl_painter_polygon (
 
 			s_scan_right: begin
 				paint_req_in = 1'b1;
-				RC_WE = 1'b1;
 				if(fb_PAINT_READY) begin
 					// Value written, move to next pixel
 					x_in = x + 1;
diff --git a/gl/painters/gl_painter_rect.sv b/gl/painters/gl_painter_rect.sv
index 6f0288b5a32ebe69a2fb95f247af4e0799bd8df2..d545eb43fbd365eb6d1fa0e35857a649c31269d3 100644
--- a/gl/painters/gl_painter_rect.sv
+++ b/gl/painters/gl_painter_rect.sv
@@ -36,8 +36,10 @@ module gl_painter_rect (
 	assign fb_PAINT_X = x;
 	assign fb_PAINT_Y = y;
 	assign fb_PAINT_RGB16 = color;
+
 	assign RC_ADDR = {x, y[8:0], PAINT_BUFFER};
 	assign RC_DATA_WR = 1'b1;
+	assign RC_WE = fb_PAINT_REQ;
 
 	always_ff @(posedge CLOCK) begin
 		if(RESET | ~EN) begin
@@ -63,7 +65,6 @@ module gl_painter_rect (
 		y_in = y;
 		color_in = color;
 		DONE = 1'b0;
-		RC_WE = 1'b0;
 		paint_req_in = 1'b0;
 
 		case (state)
@@ -76,7 +77,6 @@ module gl_painter_rect (
 			end
 			s_paint: begin
 				paint_req_in = 1'b1;
-				RC_WE = 1'b1;
 				if(fb_PAINT_READY) begin
 					// Value written, move to next pixel
 					y_in = y + 1;
diff --git a/gl/painters/gl_painter_ring.sv b/gl/painters/gl_painter_ring.sv
index bccb30da215e25d4739de10ba5281a614112bf24..10c586e9eee67ea29c5bda533e6cb3cfea091633 100644
--- a/gl/painters/gl_painter_ring.sv
+++ b/gl/painters/gl_painter_ring.sv
@@ -33,8 +33,10 @@ module gl_painter_ring (
 	logic[2:0] quadrant, quadrant_in;
 
 	assign fb_PAINT_RGB16 = CSTROKE;
+
 	assign RC_ADDR = {fb_PAINT_X, fb_PAINT_Y[8:0], PAINT_BUFFER};
 	assign RC_DATA_WR = 1'b1;
+	assign RC_WE = fb_PAINT_REQ;
 
 	always_ff @(posedge CLOCK) begin
 		if(RESET | ~EN) begin
@@ -67,7 +69,6 @@ module gl_painter_ring (
 		y_in = y;
 		xlen_in = xlen;
 		DONE = 1'b0;
-		RC_WE = 1'b0;
 		paint_req_in = 1'b0;
 
 		case (state)
@@ -82,7 +83,6 @@ module gl_painter_ring (
 
 			s_axis: begin
 				paint_req_in = 1'b1;
-				RC_WE = 1'b1;
 				if(fb_PAINT_READY) begin
 					// Value written, move to next pixel
 					x_in = x + 1;
@@ -117,7 +117,6 @@ module gl_painter_ring (
 
 			s_paint: begin
 				paint_req_in = 1'b1;
-				RC_WE = 1'b1;
 				if(fb_PAINT_READY) begin
 					// Value written, move to next pixel
 					x_in = x + 1;