Index: src/osd/windows/video.c
===================================================================
--- src/osd/windows/video.c	(revision 5219)
+++ src/osd/windows/video.c	(working copy)
@@ -121,6 +121,8 @@
 		m_aspect(0.0f),
 		m_name(NULL)
 {
+	m_name = (char *)osd_malloc(64);
+	if (m_name) m_name[0] = NULL;
 }
 
 win_monitor_info::~win_monitor_info()
@@ -141,9 +143,13 @@
 	m_info.cbSize = sizeof(m_info);
 	result = GetMonitorInfo(m_handle, (LPMONITORINFO)&m_info);
 	assert(result);
-	if (m_name != NULL)
-		osd_free(m_name);
-	m_name = utf8_from_tstring(m_info.szDevice);
+	char *temp = utf8_from_tstring(m_info.szDevice);
+	if (temp)
+	{	
+		strncpy(m_name, temp, sizeof(*m_name));
+		osd_free(temp);
+	}
+
 	(void)result; // to silence gcc 4.6
 }
 
@@ -161,7 +167,7 @@
 	if (video_config.keepaspect)
 	{
 		int width, height;
-		refresh();
+		//refresh();
 		width = rect_width(&m_info.rcMonitor);
 		height = rect_height(&m_info.rcMonitor);
 		return m_aspect / ((float)width / (float)height);
Index: src/osd/windows/video.h
===================================================================
--- src/osd/windows/video.h	(revision 5219)
+++ src/osd/windows/video.h	(working copy)
@@ -47,7 +47,7 @@
 	const RECT &position_size() { refresh(); return m_info.rcMonitor; }
 	const RECT &usuable_position_size() { refresh(); return m_info.rcWork; }
 	bool is_primary() { return (m_info.dwFlags & MONITORINFOF_PRIMARY) != 0; }
-	const char *devicename() { refresh(); return (m_name != NULL) ? m_name : "UNKNOWN"; }
+	const char *devicename() { refresh(); return (m_name != NULL) && m_name[0] ? m_name : "UNKNOWN"; }
 
 	float aspect();
 
