diff --git a/src/conio/bitmap_con.c b/src/conio/bitmap_con.c
index 73b1399dd1c7c6cb2779e778fc70d3fb592af6ec..6e384f925cb859b293add494a5bce417ed56352d 100644
--- a/src/conio/bitmap_con.c
+++ b/src/conio/bitmap_con.c
@@ -36,7 +36,6 @@ static int default_font=-99;
 static int current_font[4]={-99, -99, -99, -99};
 static int bitmap_initialized=0;
 
-static pthread_rwlock_t vmem_lock;
 struct video_stats vstat;
 
 struct bitmap_callbacks {
@@ -116,23 +115,6 @@ static __inline void *locked_screen_check(void)
 	return(ret);
 }
 
-static struct vstat_vmem *lock_vmem(struct video_stats *vs, int wr)
-{
-	struct vstat_vmem *ret;
-	ret = get_vmem(vs);
-	if (wr)
-		pthread_rwlock_wrlock(&vmem_lock);
-	else
-		pthread_rwlock_rdlock(&vmem_lock);
-	return ret;
-}
-
-static void unlock_vmem(struct vstat_vmem *vm)
-{
-	pthread_rwlock_unlock(&vmem_lock);
-	release_vmem(vm);
-}
-
 static void request_redraw_locked(void)
 {
 	force_redraws = 1;
@@ -263,13 +245,10 @@ int bitmap_init(void (*drawrect_cb) (int xpos, int ypos, int width, int height,
 	if(bitmap_initialized)
 		return(-1);
 	pthread_mutex_init(&callbacks.lock, NULL);
-	pthread_rwlock_init(&vmem_lock, NULL);
 	pthread_rwlock_init(&vstatlock, NULL);
 	pthread_rwlock_init(&screen.screenlock, NULL);
 	pthread_rwlock_wrlock(&vstatlock);
-	pthread_rwlock_wrlock(&vmem_lock);
 	vstat.vmem=NULL;
-	pthread_rwlock_unlock(&vmem_lock);
 	vstat.flags = VIDMODES_FLAG_PALETTE_VMEM;
 	pthread_rwlock_unlock(&vstatlock);
 
@@ -297,10 +276,8 @@ int bitmap_init_mode(int mode, int *width, int *height)
 		return(-1);
 
 	pthread_rwlock_wrlock(&vstatlock);
-	pthread_rwlock_wrlock(&vmem_lock);
 
 	if(load_vmode(&vstat, mode)) {
-		pthread_rwlock_unlock(&vmem_lock);
 		pthread_rwlock_unlock(&vstatlock);
 		return(-1);
 	}
@@ -329,7 +306,6 @@ int bitmap_init_mode(int mode, int *width, int *height)
 	screen.screen=newscreen;
 	memset_u32(screen.screen,vstat.palette[0],screen.screenwidth*screen.screenheight);
 	pthread_rwlock_unlock(&screen.screenlock);
-	pthread_rwlock_unlock(&vmem_lock);
 	for (i=0; i<sizeof(current_font)/sizeof(current_font[0]); i++)
 		current_font[i]=default_font;
 	bitmap_loadfont_locked(NULL);
@@ -582,7 +558,7 @@ int bitmap_movetext(int x, int y, int ex, int ey, int tox, int toy)
 	destoffset=(((toy-1)*cio_textinfo.screenwidth+(tox-1))-sourcepos);
 
 	pthread_rwlock_rdlock(&vstatlock);
-	vmem_ptr = lock_vmem(&vstat, 1);
+	vmem_ptr = get_vmem(&vstat);
 	if (vstat.curs_row >= y && vstat.curs_row <= ey &&
 	    vstat.curs_col >= x && vstat.curs_col <= ex)
 		bitmap_draw_one_char(&vstat, vstat.curs_col, vstat.curs_row);
@@ -602,7 +578,7 @@ int bitmap_movetext(int x, int y, int ex, int ey, int tox, int toy)
 	/* TODO: Just resend the whole screen... */
 	request_pixels_locked();
 	pthread_rwlock_unlock(&screen.screenlock);
-	unlock_vmem(vmem_ptr);
+	release_vmem(vmem_ptr);
 	pthread_rwlock_unlock(&vstatlock);
 
 	return(1);
@@ -618,14 +594,14 @@ void bitmap_clreol(void)
 	row = cio_textinfo.cury + cio_textinfo.wintop - 1;
 	pos=(row - 1)*cio_textinfo.screenwidth;
 	pthread_rwlock_rdlock(&vstatlock);
-	vmem_ptr = lock_vmem(&vstat, 1);
+	vmem_ptr = get_vmem(&vstat);
 	for(x=cio_textinfo.curx+cio_textinfo.winleft-2; x<cio_textinfo.winright; x++) {
 		set_vmem_cell(vmem_ptr, pos+x, fill);
 		vmem_ptr->fgvmem[pos+x] = ciolib_fg;
 		vmem_ptr->bgvmem[pos+x] = ciolib_bg;
 		bitmap_draw_one_char(&vstat, x+1, row);
 	}
-	unlock_vmem(vmem_ptr);
+	release_vmem(vmem_ptr);
 	pthread_rwlock_unlock(&vstatlock);
 	send_text_rectangle(cio_textinfo.curx+cio_textinfo.winleft-2, row-1, cio_textinfo.winright - cio_textinfo.curx+cio_textinfo.winleft - 3, 1, FALSE);
 }
@@ -637,7 +613,7 @@ void bitmap_clrscr(void)
 	struct vstat_vmem *vmem_ptr;
 
 	pthread_rwlock_rdlock(&vstatlock);
-	vmem_ptr = lock_vmem(&vstat, 1);
+	vmem_ptr = get_vmem(&vstat);
 	for(y=cio_textinfo.wintop-1; y<cio_textinfo.winbottom; y++) {
 		for(x=cio_textinfo.winleft-1; x<cio_textinfo.winright; x++) {
 			set_vmem_cell(vmem_ptr, y*cio_textinfo.screenwidth+x, fill);
@@ -646,7 +622,7 @@ void bitmap_clrscr(void)
 			bitmap_draw_one_char(&vstat, x+1, y+1);
 		}
 	}
-	unlock_vmem(vmem_ptr);
+	release_vmem(vmem_ptr);
 	pthread_rwlock_unlock(&vstatlock);
 	send_text_rectangle(cio_textinfo.winleft-1, cio_textinfo.wintop-1, cio_textinfo.winright - cio_textinfo.winleft + 1, cio_textinfo.winbottom - cio_textinfo.wintop + 1, TRUE);
 }
@@ -676,7 +652,7 @@ int bitmap_pputtext(int sx, int sy, int ex, int ey, void *fill, uint32_t *fg, ui
 		return(0);
 
 	pthread_rwlock_rdlock(&vstatlock);
-	vmem_ptr = lock_vmem(&vstat, 1);
+	vmem_ptr = get_vmem(&vstat);
 	out=fill;
 	fgout = fg;
 	bgout = bg;
@@ -692,7 +668,7 @@ int bitmap_pputtext(int sx, int sy, int ex, int ey, void *fill, uint32_t *fg, ui
 			bitmap_draw_one_char(&vstat, x+1, y+1);
 		}
 	}
-	unlock_vmem(vmem_ptr);
+	release_vmem(vmem_ptr);
 	pthread_rwlock_unlock(&vstatlock);
 	send_text_rectangle(sx-1, sy-1, ex-sx + 1, ey - sy + 1, FALSE);
 	return(1);
@@ -746,7 +722,7 @@ int bitmap_pgettext(int sx, int sy, int ex, int ey, void *fill, uint32_t *fg, ui
 		return(0);
 
 	pthread_rwlock_rdlock(&vstatlock);
-	vmem_ptr = lock_vmem(&vstat, 0);
+	vmem_ptr = get_vmem(&vstat);
 	out=fill;
 	fgout=fg;
 	bgout=bg;
@@ -761,7 +737,7 @@ int bitmap_pgettext(int sx, int sy, int ex, int ey, void *fill, uint32_t *fg, ui
 				*(bgout++) = vmem_ptr->bgvmem[y*cio_textinfo.screenwidth+x];
 		}
 	}
-	unlock_vmem(vmem_ptr);
+	release_vmem(vmem_ptr);
 	pthread_rwlock_unlock(&vstatlock);
 	return(1);
 }
@@ -1167,7 +1143,7 @@ void bitmap_gotoxy(int x, int y)
 }
 
 /*
- * IF vs == &vstat, vstatlock and vmem_lock need to be held.
+ * IF vs == &vstat, vstatlock needs to be held.
  * If not, not
  */
 static int bitmap_draw_one_char(struct video_stats *vs, unsigned int xpos, unsigned int ypos)
@@ -1363,7 +1339,7 @@ static int update_rect(int sx, int sy, int width, int height, int force)
 	cvstat = vstat;
 
 	/* Copy the vmems into cur */
-	vmem_ptr = lock_vmem(&vstat, 0);
+	vmem_ptr = get_vmem(&vstat);
 	cvstat.vmem = &cvmem;
 	cvstat.vmem->refcount = 1;
 	cvstat.vmem->vmem = this_vmem;
@@ -1374,7 +1350,7 @@ static int update_rect(int sx, int sy, int width, int height, int force)
 	memcpy(cvstat.vmem->bgvmem, vmem_ptr->bgvmem, vstat.cols*vstat.rows*sizeof(vmem_ptr->bgvmem[0]));
 
 	/* We will not touch the "real" vstat again, so we don't need any locks */
-	unlock_vmem(vmem_ptr);
+	release_vmem(vmem_ptr);
 	pthread_rwlock_unlock(&vstatlock);
 
 	if (hold_update)