diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c
index 1161618..02da731 100644
--- a/modules/printbackends/cups/gtkprintbackendcups.c
+++ b/modules/printbackends/cups/gtkprintbackendcups.c
@@ -3723,7 +3723,27 @@ cups_printer_get_options (GtkPrinter           *printer,
       name = get_option_name (opts[i].name);
       option = gtk_printer_option_set_lookup (set, name);
       if (option)
-        gtk_printer_option_set (option, opts[i].value);
+        {
+          /* We need to remove the Custom. string from PICKONE_* option types. */
+          char *customvalue;
+          switch (option->type)
+            {
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_INT:
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_PASSCODE:
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_PASSWORD:
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_REAL:
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_STRING:
+              if (g_str_has_prefix (opts[i].value, "Custom."))
+                customvalue = opts[i].value + 7;
+              else
+                customvalue = opts[i].value;
+
+              gtk_printer_option_set (option, customvalue);
+              break;
+            default:
+              gtk_printer_option_set (option, opts[i].value);
+            }
+        }
       g_free (name);
     }
 
@@ -4083,7 +4103,27 @@ set_option_from_settings (GtkPrinterOption *option,
     {
       cups_value = gtk_print_settings_get (settings, option->name);
       if (cups_value)
-	gtk_printer_option_set (option, cups_value);
+        {
+          /* We need to remove the Custom. string from PICKONE_* option types. */
+          char *customvalue;
+          switch (option->type)
+            {
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_INT:
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_PASSCODE:
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_PASSWORD:
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_REAL:
+            case GTK_PRINTER_OPTION_TYPE_PICKONE_STRING:
+              if (g_str_has_prefix (cups_value, "Custom."))
+                customvalue = cups_value + 7;
+              else
+                customvalue = cups_value;
+
+              gtk_printer_option_set (option, customvalue);
+              break;
+            default:
+              gtk_printer_option_set (option, cups_value);
+            }
+        }
     } 
 }
 
@@ -4148,7 +4188,25 @@ foreach_option_get_settings (GtkPrinterOption *option,
   else if (strcmp (option->name, "gtk-print-time-text") == 0)
     gtk_print_settings_set (settings, "print-at-time", value);
   else if (g_str_has_prefix (option->name, "cups-"))
-    gtk_print_settings_set (settings, option->name, value);
+    {
+      char *customvalue = NULL;
+
+      switch (option->type)
+        {
+        case GTK_PRINTER_OPTION_TYPE_PICKONE_INT:
+        case GTK_PRINTER_OPTION_TYPE_PICKONE_PASSCODE:
+        case GTK_PRINTER_OPTION_TYPE_PICKONE_PASSWORD:
+        case GTK_PRINTER_OPTION_TYPE_PICKONE_REAL:
+        case GTK_PRINTER_OPTION_TYPE_PICKONE_STRING:
+          customvalue = g_strconcat("Custom.", value, NULL);
+          gtk_print_settings_set (settings, option->name, customvalue);
+          g_free (customvalue);
+          break;
+        default:
+          gtk_print_settings_set (settings, option->name, value);
+          break;
+        }
+    }
 }
 
 static gboolean
