diff -urw a/xfsettingsd/displays.c b/xfsettingsd/displays.c --- a/xfsettingsd/displays.c 2013-09-23 19:47:03.000000000 +0200 +++ b/xfsettingsd/displays.c 2014-02-01 12:20:56.901311902 +0100 @@ -565,6 +565,7 @@ Rotation rot; gint x, y, n, m, int_value; gboolean active; + int width, height; g_assert (XFCE_IS_DISPLAYS_HELPER (helper) && helper->resources && output); @@ -672,6 +673,12 @@ else str_value = g_value_get_string (value); + if (sscanf(str_value, "%dx%d", &width, &height) != 2) + { + g_warning("Resolution does not conform to the pattern x."); + width = height = -1; + } + /* refresh rate */ g_snprintf (property, sizeof (property), RRATE_PROP, scheme, output->info->name); value = g_hash_table_lookup (saved_outputs, property); @@ -696,8 +703,9 @@ ((gdouble) helper->resources->modes[m].hTotal * (gdouble) helper->resources->modes[m].vTotal); /* find the mode corresponding to the saved values */ - if (rint (rate) == rint (output_rate) - && (g_strcmp0 (helper->resources->modes[m].name, str_value) == 0)) + if (rint (rate * 10) == rint (output_rate * 10) + && helper->resources->modes[m].width == width + && helper->resources->modes[m].height == height) { valid_mode = helper->resources->modes[m].id; break;