Index: applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintDialog.java
===================================================================
--- applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintDialog.java	(revision 33102)
+++ applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintDialog.java	(revision 33118)
@@ -15,6 +15,8 @@
 import java.awt.print.PrinterException;
 import java.awt.print.PrinterJob;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.text.ParseException;
@@ -58,4 +60,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.WindowGeometry;
 
@@ -490,5 +493,5 @@
 
     @SuppressWarnings("unchecked")
-    protected Attribute unmarshallPrintSetting(Collection<String> setting) throws
+    static Attribute unmarshallPrintSetting(Collection<String> setting) throws
         ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
 
@@ -505,4 +508,5 @@
         } else if (syntax.equals(EnumSyntax.class)) {
             int intValue = Integer.parseInt(value);
+            // First method - access static enum fields by reflection for classes that do not implement getEnumValueTable
             for (Field f : realClass.getFields()) {
                 if (Modifier.isStatic(f.getModifiers()) && category.isAssignableFrom(f.getType())) {
@@ -513,5 +517,15 @@
                 }
             }
-            throw new IllegalArgumentException("Invalid enum: "+realClass+" - "+value);
+            // Second method - get instance from getEnumValueTable by reflection
+            try {
+                Method getEnumValueTable = realClass.getDeclaredMethod("getEnumValueTable");
+                Constructor<? extends Attribute> constructor = realClass.getDeclaredConstructor(int.class);
+                Utils.setObjectsAccessible(getEnumValueTable, constructor);
+                Attribute fakeInstance = constructor.newInstance(Integer.MAX_VALUE);
+                EnumSyntax[] enumTable = (EnumSyntax[]) getEnumValueTable.invoke(fakeInstance);
+                return (Attribute) enumTable[intValue];
+            } catch (ReflectiveOperationException | ArrayIndexOutOfBoundsException e) {
+                throw new IllegalArgumentException("Invalid enum: "+realClass+" - "+value, e);
+            }
         } else if (syntax.equals(IntegerSyntax.class)) {
             return realClass.getConstructor(int.class).newInstance(Integer.parseInt(value));
