Index: /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/GuiProjections.java
===================================================================
--- /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/GuiProjections.java	(revision 34795)
+++ /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/GuiProjections.java	(revision 34796)
@@ -159,5 +159,4 @@
 
     private void build() {
-//        JButton specBtn = new JButton(tr("Specifiy"));
         pCode = new JLabel("code",SwingConstants.RIGHT);
         pName = new JLabel("Name",SwingConstants.RIGHT);
@@ -178,99 +177,2 @@
     }
 }
-
-//class ProjectionSubPrefsDialog extends JDialog {
-///*
-// * note currently non-functional ==> not used
-// */
-//private final ProjectionChoice projPref;
-//private OKAction actOK;
-//private CancelAction actCancel;
-//private JPanel projPrefPanel;
-//
-//ProjectionSubPrefsDialog(Component parent, ProjectionChoice pr) {
-//    super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
-//
-//    projPref = pr;
-//
-//    setTitle(tr("Projection Preferences"));
-//    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-//
-//    build();
-//}
-//
-//protected void makeButtonRespondToEnter(SideButton btn) {
-//    btn.setFocusable(true);
-//    btn.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enter");
-//    btn.getActionMap().put("enter", btn.getAction());
-//}
-//
-//protected JPanel buildInputForm() {
-//    return projPref.getPreferencePanel(null);
-//}
-//
-//protected JPanel buildButtonRow() {
-//    JPanel pnl = new JPanel(new FlowLayout());
-//
-//    actOK = new OKAction();
-//    actCancel = new CancelAction();
-//
-//    SideButton btn;
-//    pnl.add(btn = new SideButton(actOK));
-//    // makeButtonRespondToEnter(btn);
-//    // pnl.add(btn = new SideButton(actCancel));
-//    // makeButtonRespondToEnter(btn);
-//    return pnl;
-//}
-//
-//protected void build() {
-//    projPrefPanel = buildInputForm();
-//    getContentPane().setLayout(new BorderLayout());
-//    getContentPane().add(projPrefPanel, BorderLayout.CENTER);
-//    getContentPane().add(buildButtonRow(), BorderLayout.SOUTH);
-//    pack();
-//
-//    // make dialog respond to ESCAPE
-//    getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
-//            .put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "escape");
-//    getRootPane().getActionMap().put("escape", actCancel);
-//}
-//
-//class OKAction extends AbstractAction {
-//    OKAction() {
-//        putValue(NAME, tr("OK"));
-//        putValue(SHORT_DESCRIPTION, tr("Close the dialog and apply projection preferences"));
-//        putValue(SMALL_ICON, ImageProvider.get("ok"));
-//    }
-//
-//    @Override
-//    public void actionPerformed(ActionEvent e) {
-//        projPref.setPreferences(projPref.getPreferences(projPrefPanel));
-//        setVisible(false);
-//    }
-//}
-//
-//class CancelAction extends AbstractAction {
-//    CancelAction() {
-//        putValue(NAME, tr("Cancel"));
-//        putValue(SHORT_DESCRIPTION, tr("Close the dialog, discard projection preference changes"));
-//        putValue(SMALL_ICON, ImageProvider.get("cancel"));
-//    }
-//
-//    @Override
-//    public void actionPerformed(ActionEvent e) {
-//        setVisible(false);
-//    }
-//}
-//
-//@Override
-//public void setVisible(boolean visible) {
-//    if (visible) {
-//        new WindowGeometry(getClass().getName() + ".geometry",
-//                WindowGeometry.centerOnScreen(new Dimension(400, 300))).applySafe(this);
-//    } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
-//        new WindowGeometry(this).remember(getClass().getName() + ".geometry");
-//    }
-//    super.setVisible(visible);
-//}
-//}
-
Index: /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/LoadPdfDialog.java
===================================================================
--- /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/LoadPdfDialog.java	(revision 34795)
+++ /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/LoadPdfDialog.java	(revision 34796)
@@ -11,5 +11,4 @@
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
-import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -20,15 +19,10 @@
 import java.io.IOException;
 
-import javax.swing.BorderFactory;
 import javax.swing.JButton;
-import javax.swing.JComponent;
 import javax.swing.JFileChooser;
 import javax.swing.JFrame;
-import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JProgressBar;
-import javax.swing.JTextField;
-import javax.swing.SwingConstants;
 import javax.swing.SwingUtilities;
 import javax.swing.filechooser.FileFilter;
@@ -47,708 +41,580 @@
 public class LoadPdfDialog extends JFrame {
 
-    public static class MainButtons {
-        public JButton okButton;
-        public JButton cancelButton;
-        public JButton showButton;
-        public JButton saveButton;
-        public JPanel panel;
-
-        public MainButtons() {
-        }
-
-        void build(LoadPdfDialog loadPdfDialog) {
-            /*
-             * build the dialog Window from components
-             */
-            okButton = new JButton(tr("Import"));
-            okButton.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    loadPdfDialog.importAction();
-                }
-            });
-            saveButton = new JButton(tr("Save"));
-            saveButton.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    loadPdfDialog.saveAction();
-                }
-            });
-
-            showButton = new JButton(tr("Show target"));
-            showButton.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    loadPdfDialog.showAction();
-                }
-            });
-
-            cancelButton = new JButton(tr("Cancel"));
-            cancelButton.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    loadPdfDialog.cancelAction();
-                }
-            });
-
-            panel = new JPanel(new FlowLayout());
-            panel.add(cancelButton);
-            panel.add(showButton);
-            panel.add(okButton);
-            panel.add(saveButton);
-            showButton.setVisible(Preferences.isLegacyActions());
-            saveButton.setVisible(Preferences.isLegacyActions());
-        }
-    }
-
-
-    private static class Config {
-        /*
-         * encapsulate options for Path optimizer
-         * provide GUI
-         */
-        public GuiFieldBool debugModeCheck;
-        public GuiFieldBool mergeCloseNodesCheck;
-        public GuiFieldDouble mergeCloseNodesTolerance;
-        public GuiFieldBool removeSmallObjectsCheck;
-        public GuiFieldDouble removeSmallObjectsSize;
-        public JTextField colorFilterColor;
-        public GuiFieldBool colorFilterCheck;
-        public GuiFieldBool removeParallelSegmentsCheck;
-        public GuiFieldDouble removeParallelSegmentsTolerance;
-        public GuiFieldBool removeLargeObjectsCheck;
-        public GuiFieldDouble removeLargeObjectsSize;
-        public GuiFieldBool limitPathCountCheck;
-        public GuiFieldInteger limitPathCount;
-        public GuiFieldBool splitOnColorChangeCheck;
-        public GuiFieldBool splitOnShapeClosedCheck;
-        public GuiFieldBool splitOnSingleSegmentCheck;
-        public GuiFieldBool splitOnOrthogonalCheck;
-        private JPanel panel;
-
-        public Config() {
-            build();
-        }
-
-        public JComponent getComponent() {
-            return panel;
-        }
-
-        private void build() {
-
-
-            debugModeCheck = new GuiFieldBool(tr("Debug info"), Preferences.isDebugTags());
-
-            mergeCloseNodesTolerance = new GuiFieldDouble(Preferences.getMergeNodesValue());
-            mergeCloseNodesCheck = new GuiFieldBool(tr("Merge close nodes"), Preferences.isMergeNodes());
-            mergeCloseNodesCheck.setCompanion(mergeCloseNodesTolerance);
-
-            removeSmallObjectsSize = new GuiFieldDouble(Preferences.getRemoveSmallValue());
-            removeSmallObjectsCheck = new GuiFieldBool(tr("Remove objects smaller than"), Preferences.isRemoveSmall());
-            removeSmallObjectsCheck.setCompanion(removeSmallObjectsSize);
-
-            removeLargeObjectsSize = new GuiFieldDouble(Preferences.getRemoveLargeValue());
-            removeLargeObjectsCheck = new GuiFieldBool(tr("Remove objects larger than"), Preferences.isRemoveLarge());
-            removeLargeObjectsCheck.setCompanion(removeLargeObjectsSize);
-
-            colorFilterColor = new GuiFieldHex(Preferences.getLimitColorValue());
-            colorFilterCheck = new GuiFieldBool(tr("Only this color"), Preferences.isLimitColor());
-            colorFilterCheck.setCompanion(colorFilterColor);
-
-            removeParallelSegmentsTolerance = new GuiFieldDouble(Preferences.getRemoveParallelValue());
-            removeParallelSegmentsCheck = new GuiFieldBool(tr("Remove parallel lines"), Preferences.isRemoveParallel());
-            removeParallelSegmentsCheck.setCompanion(removeParallelSegmentsTolerance);
-
-            limitPathCount = new GuiFieldInteger(Preferences.getLimitPathValue());
-            limitPathCountCheck = new GuiFieldBool(tr("Take only first X paths"), Preferences.isLimitPath());
-            limitPathCountCheck.setCompanion(limitPathCount);
-
-            splitOnColorChangeCheck = new GuiFieldBool(tr("Color/width change"), Preferences.isLayerAttribChange());
-            splitOnShapeClosedCheck = new GuiFieldBool(tr("Shape closed"), Preferences.isLayerClosed());
-
-            splitOnSingleSegmentCheck = new GuiFieldBool(tr("Single segments", Preferences.isLayerSegment()));
-            splitOnOrthogonalCheck = new GuiFieldBool(tr("Orthogonal shapes", Preferences.isLayerOrtho()));
-
-            panel = new JPanel(new GridBagLayout());
-            panel.setBorder(BorderFactory.createTitledBorder(tr("Import settings")));
-
-            GridBagConstraints cBasic = new GridBagConstraints();
-            cBasic.gridx = GridBagConstraints.RELATIVE;
-            cBasic.gridy = GridBagConstraints.RELATIVE;
-            cBasic.insets = new Insets(0, 0, 0, 4);
-            cBasic.anchor = GridBagConstraints.LINE_START;
-            cBasic.fill = GridBagConstraints.HORIZONTAL;
-            cBasic.gridheight = 1;
-            cBasic.gridwidth = 1;
-            cBasic.ipadx = 0;
-            cBasic.ipady = 0;
-            cBasic.weightx = 0.0;
-            cBasic.weighty = 0.0;
-
-            GridBagConstraints cLeft = (GridBagConstraints) cBasic.clone();
-            cLeft.gridx = 0;
-
-            GridBagConstraints cMiddle = (GridBagConstraints) cBasic.clone();
-            cMiddle.gridx = 1;
-            cMiddle.anchor = GridBagConstraints.LINE_END;
-
-            GridBagConstraints cRight = (GridBagConstraints) cBasic.clone();
-            cRight.gridx = 2;
-
-            panel.add(mergeCloseNodesCheck, cLeft);
-            panel.add(new JLabel(tr("Tolerance:"),SwingConstants.RIGHT), cMiddle);
-            panel.add(mergeCloseNodesTolerance, cRight);
-
-            panel.add(removeSmallObjectsCheck, cLeft);
-            panel.add(new JLabel(tr("Tolerance:"),SwingConstants.RIGHT), cMiddle);
-            panel.add(removeSmallObjectsSize, cRight);
-
-            panel.add(removeLargeObjectsCheck, cLeft);
-            panel.add(new JLabel(tr("Tolerance:"),SwingConstants.RIGHT), cMiddle);
-            panel.add(removeLargeObjectsSize, cRight);
-
-            panel.add(removeParallelSegmentsCheck, cLeft);
-            panel.add(new JLabel(tr("Max distance:"),SwingConstants.RIGHT), cMiddle);
-            panel.add(removeParallelSegmentsTolerance, cRight);
-
-            panel.add(limitPathCountCheck, cLeft);
-            panel.add(limitPathCount, cRight);
-
-            panel.add(colorFilterCheck, cLeft);
-            panel.add(colorFilterColor, cRight);
-
-            panel.add(debugModeCheck, cLeft);
-
-            cLeft.gridy = 8; panel.add(new JLabel(tr("Introduce separate layers for:")), cLeft);
-            cMiddle.gridy = 8; panel.add(splitOnShapeClosedCheck, cMiddle);
-            cRight.gridy = 8; panel.add(splitOnSingleSegmentCheck, cRight);
-            cMiddle.gridy = 9; panel.add(splitOnColorChangeCheck, cMiddle);
-            cRight.gridy = 9;panel.add(splitOnOrthogonalCheck, cRight);
-        }
-    }
-
-    static class LoadProgressRenderer implements ProgressRenderer {
-        private final JProgressBar pBar;
-        private String title = "";
-
-        LoadProgressRenderer(JProgressBar pb) {
-            this.pBar = pb;
-            this.pBar.setMinimum(0);
-            this.pBar.setValue(0);
-            this.pBar.setMaximum(1);
-            this.pBar.setString("");
-            this.pBar.setStringPainted(true);
-
-        }
-
-        @Override
-        public void setCustomText(String message) {
-            this.pBar.setString(this.title + message);
-        }
-
-        @Override
-        public void setIndeterminate(boolean indeterminate) {
-            this.pBar.setIndeterminate(indeterminate);
-        }
-
-        @Override
-        public void setMaximum(int maximum) {
-            this.pBar.setMaximum(maximum);
-        }
-
-        @Override
-        public void setTaskTitle(String taskTitle) {
-            this.title = taskTitle;
-            this.pBar.setString(this.title);
-        }
-
-        @Override
-        public void setValue(int value) {
-            this.pBar.setValue(value);
-        }
-
-        public void finish() {
-            this.pBar.setString(tr("Finished"));
-            this.pBar.setValue(this.pBar.getMaximum());
-        }
-
-    }
-
-    private File pdfFile;
-    private final FilePlacement18 placement = new FilePlacement18();
-
-    private PathOptimizer pdfData;
-//    private OsmDataLayer dataLayer;
-
-    private final JButton loadFileButton = new JButton(tr("Load preview ..."));
-
-    private final JProgressBar loadProgress = new JProgressBar();
+	public static class MainButtons {
+		public JButton okButton;
+		public JButton cancelButton;
+		public JButton showButton;
+		public JButton saveButton;
+		public JPanel panel;
+
+		public MainButtons() {
+		}
+
+		void build(LoadPdfDialog loadPdfDialog) {
+			/*
+			 * build the dialog Window from components
+			 */
+			okButton = new JButton(tr("Import"));
+			okButton.addActionListener(new ActionListener() {
+				@Override
+				public void actionPerformed(ActionEvent e) {
+					loadPdfDialog.importAction();
+				}
+			});
+			saveButton = new JButton(tr("Save"));
+			saveButton.addActionListener(new ActionListener() {
+				@Override
+				public void actionPerformed(ActionEvent e) {
+					loadPdfDialog.saveAction();
+				}
+			});
+
+			showButton = new JButton(tr("Show target"));
+			showButton.addActionListener(new ActionListener() {
+				@Override
+				public void actionPerformed(ActionEvent e) {
+					loadPdfDialog.showAction();
+				}
+			});
+
+			cancelButton = new JButton(tr("Cancel"));
+			cancelButton.addActionListener(new ActionListener() {
+				@Override
+				public void actionPerformed(ActionEvent e) {
+					loadPdfDialog.cancelAction();
+				}
+			});
+
+			panel = new JPanel(new FlowLayout());
+			panel.add(cancelButton);
+			panel.add(showButton);
+			panel.add(okButton);
+			panel.add(saveButton);
+			showButton.setVisible(Preferences.isLegacyActions());
+			saveButton.setVisible(Preferences.isLegacyActions());
+		}
+	}
+
+	static class LoadProgressRenderer implements ProgressRenderer {
+		private final JProgressBar pBar;
+		private String title = "";
+
+		LoadProgressRenderer(JProgressBar pb) {
+			this.pBar = pb;
+			this.pBar.setMinimum(0);
+			this.pBar.setValue(0);
+			this.pBar.setMaximum(1);
+			this.pBar.setString("");
+			this.pBar.setStringPainted(true);
+		}
+
+		@Override
+		public void setCustomText(String message) {
+			this.pBar.setString(this.title + message);
+		}
+
+		@Override
+		public void setIndeterminate(boolean indeterminate) {
+			this.pBar.setIndeterminate(indeterminate);
+		}
+
+		@Override
+		public void setMaximum(int maximum) {
+			this.pBar.setMaximum(maximum);
+		}
+
+		@Override
+		public void setTaskTitle(String taskTitle) {
+			this.title = taskTitle;
+			this.pBar.setString(this.title);
+		}
+
+		@Override
+		public void setValue(int value) {
+			this.pBar.setValue(value);
+		}
+
+		public void finish() {
+			this.pBar.setString(tr("Finished"));
+			this.pBar.setValue(this.pBar.getMaximum());
+		}
+	}
+
+	private File pdfFile;
+	private final FilePlacement18 placement = new FilePlacement18();
+
+	private PathOptimizer pdfData;
+
+	private final JButton loadFileButton = new JButton(tr("Load preview ..."));
+
+	private final JProgressBar loadProgress = new JProgressBar();
 ;
-    private OsmDataLayer newLayer;
-
-    private LoadProgressRenderer progressRenderer;
-
-    public LoadPdfDialog() {
-        buildGUI();
-        removeLayer();
-        if (Preferences.getGuiMode() == Preferences.GuiMode.Simple) {
-            loadFileButton.setVisible(false);
-            configPanel.panel.setVisible(false);
-            actionPanel.saveButton.setVisible(false);
-            actionPanel.showButton.setVisible(false);
-            setSize(new Dimension(380, 350));
-            if (!loadAction()) {
-                cancelAction();
-                return;
-            }
-        } else {
-            setSize(new Dimension(450, 600));
-        }
-        setAlwaysOnTop(true);
-        setVisible(true);
-    }
-
-    Component placementPanel = placement.getGui();
-    MainButtons actionPanel = new MainButtons();
-    Config configPanel = new Config();
-
-    private void buildGUI() {
-        /*
-         * build the GUI from Components
-         */
-        GridBagConstraints c = new GridBagConstraints();
-        c.gridheight = 1;
-        c.gridwidth = 1;
-        c.gridx = 0;
-        c.gridy = GridBagConstraints.RELATIVE;
-        c.fill = GridBagConstraints.BOTH;
-        c.insets = new java.awt.Insets(0, 0, 0, 0);
-
-        actionPanel.build(this);
-
-        loadFileButton.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                loadAction();
-            }
-        });
-
-        progressRenderer = new LoadProgressRenderer(loadProgress);
-
-        JPanel panel = new JPanel(new GridBagLayout());
-
-        panel.add(configPanel.getComponent(), c);
-        c.fill = GridBagConstraints.HORIZONTAL;
-        panel.add(loadFileButton, c);
-        c.fill = GridBagConstraints.BOTH;
-        panel.add(placementPanel, c);
-        panel.add(actionPanel.panel, c);
-        c.fill = GridBagConstraints.HORIZONTAL;
-        panel.add(this.loadProgress, c);
-
-        setContentPane(panel);
-        addWindowListener(new WindowAdapter() {
-            @Override
-            public void windowClosing(WindowEvent e) {
-                cancelAction();
-            }
-        });
-        placement.setDependsOnValid(actionPanel.okButton);
-
-        /*
-         * TODO: Make okButton to default Button of Dialog, make cancelButton to react on ESC-Key
-         */
-//        SwingUtilities.getRootPane(panel).setDefaultButton(actionPanel.okButton);
-    }
-
-     private boolean loadAction() {
-         /*
-          * perform load PDF file to preview
-          * TODO: load preview to previous placement, involves reverse transform
-          */
-        final File newFileName = this.chooseFile();
-
-        if (newFileName == null) {
-            return false;
-        }
-        Logging.debug("PdfImport: Load Preview");
-        this.removeLayer();
-
-        this.loadFileButton.setEnabled(false);
-
-        this.runAsBackgroundTask(new Runnable() {
-            @Override
-            public void run() {
-                // async part
-                LoadPdfDialog.this.loadProgress.setVisible(true);
-                SwingRenderingProgressMonitor monitor = new SwingRenderingProgressMonitor(progressRenderer);
-                monitor.beginTask("Loading file", 1000);
-                pdfData = loadPDF(newFileName, monitor.createSubTaskMonitor(500, false));
-                OsmBuilder.Mode mode = LoadPdfDialog.this.configPanel.debugModeCheck.getValue()
-                        ? OsmBuilder.Mode.Debug
-                        : OsmBuilder.Mode.Draft;
-
-                if (pdfData != null) {
-                    LoadPdfDialog.this.newLayer = LoadPdfDialog.this.makeLayer(
-                            tr("PDF preview: ") + newFileName.getName(), new FilePlacement(), mode,
-                            monitor.createSubTaskMonitor(500, false));
-                }
-
-                monitor.finishTask();
-                progressRenderer.finish();
-            }
-        }, new ActionListener() {
-
-            @Override
-            public void actionPerformed(ActionEvent event) {
-                // sync part
-                LoadPdfDialog.this.pdfFile = newFileName;
-                if (pdfData != null) {
-                    Preview.set(newLayer, new FilePlacement());
-                    MainApplication.getMap().mapView.zoomTo(placement.getWorldBounds(pdfData));
-                    try {
-                        LoadPdfDialog.this.placement.load(newFileName);
-                    } catch (IOException e) {
-                        // Saved placement does not exist, corrupt, ... ---> ignore it
-                    } finally {
-                        LoadPdfDialog.this.placement.verify();
-                    }
-                    LoadPdfDialog.this.newLayer = null;
-                    LoadPdfDialog.this.loadFileButton.setEnabled(true);
-                    LoadPdfDialog.this.placementPanel.setEnabled(true);
-                    LoadPdfDialog.this.actionPanel.panel.setEnabled(true);
-                    LoadPdfDialog.this.actionPanel.showButton.setEnabled(true);
-                    LoadPdfDialog.this.actionPanel.saveButton.setEnabled(true);
-                    LoadPdfDialog.this.actionPanel.okButton.setEnabled(true);
-                    LoadPdfDialog.this.loadProgress.setVisible(false);
-                }
-            }
-        });
-        return true;
-    }
-
-    private void importAction() {
-
-        if (!placement.isValid()) return;
-        try {
-            placement.save(pdfFile);
-        } catch (IOException e) {
-            e.toString();
-        }
-        removeLayer();
-
-        runAsBackgroundTask(new Runnable() {
-            @Override
-            public void run() {
-                // async part
-                LoadPdfDialog.this.loadProgress.setVisible(true);
-                SwingRenderingProgressMonitor monitor = new SwingRenderingProgressMonitor(progressRenderer);
-                LoadPdfDialog.this.newLayer = LoadPdfDialog.this.makeLayer(tr("PDF: ") + pdfFile.getName(), placement,
-                        OsmBuilder.Mode.Final, monitor);
-                progressRenderer.finish();
-            }
-        }, new ActionListener() {
-
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                // sync part
-                // rebuild layer with latest projection
-                MainApplication.getLayerManager().addLayer(newLayer);
-                MainApplication.getMap().mapView.zoomTo(placement.getWorldBounds(pdfData));
-                LoadPdfDialog.this.setVisible(false);
-            }
-        });
-    }
-
-    private void saveAction() {
-        /*
-         * perform save preview layer to file
-         * TODO: is this action valueable? Can be easily performed from main menu
-         */
-
-        if (!placement.isValid()) return;
-
-        final java.io.File file = this.chooseSaveFile();
-
-        if (file == null) {
-            return;
-        }
-
-        this.removeLayer();
-
-        this.runAsBackgroundTask(new Runnable() {
-            @Override
-            public void run() {
-                // async part
-                SwingRenderingProgressMonitor monitor = new SwingRenderingProgressMonitor(progressRenderer);
-                LoadPdfDialog.this.saveLayer(file, placement, monitor);
-                progressRenderer.finish();
-            }
-        }, new ActionListener() {
-
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                // sync part
-                LoadPdfDialog.this.setVisible(false);
-            }
-        });
-    }
-
-    private void showAction() {
-        /*
-         * perform show action
-         * TODO: is this action valuable? User can do it easy from OSM Main Menu
-         */
-        if (!placement.isValid()) return;
-
-        // zoom to new location
-        MainApplication.getMap().mapView.zoomTo(placement.getWorldBounds(pdfData));
-        MainApplication.getMap().repaint();
-    }
-
-    private void cancelAction() {
-        /*
-         * perform cancel action
-         */
-        removeLayer();
-        setVisible(false);
-    }
-
-    // Implementation methods
-
-    private static JFileChooser loadChooser = null;
-
-    private java.io.File chooseFile() {
-        // get PDF file to load
-        if (loadChooser == null) {
-            loadChooser = new JFileChooser(Preferences.getLoadDir());
-            loadChooser.setAcceptAllFileFilterUsed(false);
-            loadChooser.setMultiSelectionEnabled(false);
-            loadChooser.setFileFilter(new FileFilter() {
-                @Override
-                public boolean accept(java.io.File pathname) {
-                    return pathname.isDirectory() || pathname.getName().endsWith(".pdf");
-                }
-
-                @Override
-                public String getDescription() {
-                    return tr("PDF files");
-                }
-            });
-        } else {
-            loadChooser.rescanCurrentDirectory();
-        }
-        int result = loadChooser.showDialog(this, tr("Import PDF"));
-        if (result != JFileChooser.APPROVE_OPTION) {
-            return null;
-        } else {
-            Preferences.setLoadDir(loadChooser.getSelectedFile().getParentFile().getAbsolutePath());
-            return loadChooser.getSelectedFile();
-        }
-    }
-
-    private java.io.File chooseSaveFile() {
-        // get file name
-        JFileChooser fc = new JFileChooser();
-        fc.setAcceptAllFileFilterUsed(true);
-        fc.setMultiSelectionEnabled(false);
-        fc.setFileFilter(new FileFilter() {
-            @Override
-            public boolean accept(java.io.File pathname) {
-                return pathname.isDirectory() || pathname.getName().endsWith(".osm");
-            }
-
-            @Override
-            public String getDescription() {
-                return tr("OSM files");
-            }
-        });
+	private OsmDataLayer newLayer;
+
+	private LoadProgressRenderer progressRenderer;
+
+	public LoadPdfDialog() {
+		buildGUI();
+		removeLayer();
+		if (Preferences.getGuiMode() == Preferences.GuiMode.Simple) {
+			loadFileButton.setVisible(false);
+			configPanel.getComponent().setVisible(false);
+			actionPanel.saveButton.setVisible(false);
+			actionPanel.showButton.setVisible(false);
+			setSize(new Dimension(380, 350));
+			if (!loadAction()) {
+				cancelAction();
+				return;
+			}
+		} else {
+			setSize(new Dimension(450, 600));
+		}
+		setAlwaysOnTop(true);
+		setVisible(true);
+	}
+
+	Component placementPanel = placement.getGui();
+	MainButtons actionPanel = new MainButtons();
+	PathOptimizerConfig configPanel = new PathOptimizerConfig();
+
+	private void buildGUI() {
+		/*
+		 * build the GUI from Components
+		 */
+		GridBagConstraints c = new GridBagConstraints();
+		c.gridheight = 1;
+		c.gridwidth = 1;
+		c.gridx = 0;
+		c.gridy = GridBagConstraints.RELATIVE;
+		c.fill = GridBagConstraints.BOTH;
+		c.insets = new java.awt.Insets(0, 0, 0, 0);
+
+		actionPanel.build(this);
+
+		loadFileButton.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				loadAction();
+			}
+		});
+
+		progressRenderer = new LoadProgressRenderer(loadProgress);
+
+		JPanel panel = new JPanel(new GridBagLayout());
+
+		panel.add(configPanel.getComponent(), c);
+		c.fill = GridBagConstraints.HORIZONTAL;
+		panel.add(loadFileButton, c);
+		c.fill = GridBagConstraints.BOTH;
+		panel.add(placementPanel, c);
+		panel.add(actionPanel.panel, c);
+		c.fill = GridBagConstraints.HORIZONTAL;
+		panel.add(this.loadProgress, c);
+
+		setContentPane(panel);
+		addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(WindowEvent e) {
+				cancelAction();
+			}
+		});
+		placement.setDependsOnValid(actionPanel.okButton);
+
+		/*
+		 * TODO: Make okButton to default Button of Dialog, make cancelButton to react on ESC-Key
+		 */
+//		SwingUtilities.getRootPane(panel).setDefaultButton(actionPanel.okButton);
+	}
+
+	 private boolean loadAction() {
+		 /*
+		  * perform load PDF file to preview
+		  * TODO: load preview to previous placement, involves reverse transform
+		  */
+		final File newFileName = this.chooseFile();
+
+		if (newFileName == null) {
+			return false;
+		}
+		Logging.debug("PdfImport: Load Preview");
+		this.removeLayer();
+
+		this.loadFileButton.setEnabled(false);
+
+		this.runAsBackgroundTask(new Runnable() {
+			@Override
+			public void run() {
+				// async part
+				LoadPdfDialog.this.loadProgress.setVisible(true);
+				SwingRenderingProgressMonitor monitor = new SwingRenderingProgressMonitor(progressRenderer);
+				monitor.beginTask("Loading file", 1000);
+				pdfData = loadPDF(newFileName, monitor.createSubTaskMonitor(500, false));
+				OsmBuilder.Mode mode = LoadPdfDialog.this.configPanel.debugModeCheck.getValue()
+						? OsmBuilder.Mode.Debug
+						: OsmBuilder.Mode.Draft;
+
+				if (pdfData != null) {
+					LoadPdfDialog.this.newLayer = LoadPdfDialog.this.makeLayer(
+							tr("PDF preview: ") + newFileName.getName(), new FilePlacement(), mode,
+							monitor.createSubTaskMonitor(500, false));
+				}
+
+				monitor.finishTask();
+				progressRenderer.finish();
+			}
+		}, new ActionListener() {
+
+			@Override
+			public void actionPerformed(ActionEvent event) {
+				// sync part
+				LoadPdfDialog.this.pdfFile = newFileName;
+				if (pdfData != null) {
+					Preview.set(newLayer, new FilePlacement());
+					MainApplication.getMap().mapView.zoomTo(placement.getWorldBounds(pdfData));
+					try {
+						LoadPdfDialog.this.placement.load(newFileName);
+					} catch (IOException e) {
+						// Saved placement does not exist, corrupt, ... ---> ignore it
+					} finally {
+						LoadPdfDialog.this.placement.verify();
+					}
+					LoadPdfDialog.this.newLayer = null;
+					LoadPdfDialog.this.loadFileButton.setEnabled(true);
+					LoadPdfDialog.this.placementPanel.setEnabled(true);
+					LoadPdfDialog.this.actionPanel.panel.setEnabled(true);
+					LoadPdfDialog.this.actionPanel.showButton.setEnabled(true);
+					LoadPdfDialog.this.actionPanel.saveButton.setEnabled(true);
+					LoadPdfDialog.this.actionPanel.okButton.setEnabled(true);
+					LoadPdfDialog.this.loadProgress.setVisible(false);
+				}
+			}
+		});
+		return true;
+	}
+
+	private void importAction() {
+
+		if (!placement.isValid()) return;
+		try {
+			placement.save(pdfFile);
+		} catch (IOException e) {
+			e.toString();
+		}
+		removeLayer();
+
+		runAsBackgroundTask(new Runnable() {
+			@Override
+			public void run() {
+				// async part
+				LoadPdfDialog.this.loadProgress.setVisible(true);
+				SwingRenderingProgressMonitor monitor = new SwingRenderingProgressMonitor(progressRenderer);
+				LoadPdfDialog.this.newLayer = LoadPdfDialog.this.makeLayer(tr("PDF: ") + pdfFile.getName(), placement,
+						OsmBuilder.Mode.Final, monitor);
+				progressRenderer.finish();
+			}
+		}, new ActionListener() {
+
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				// sync part
+				// rebuild layer with latest projection
+				MainApplication.getLayerManager().addLayer(newLayer);
+				MainApplication.getMap().mapView.zoomTo(placement.getWorldBounds(pdfData));
+				LoadPdfDialog.this.setVisible(false);
+			}
+		});
+	}
+
+	private void saveAction() {
+		/*
+		 * perform save preview layer to file
+		 * TODO: is this action valueable? Can be easily performed from main menu
+		 */
+
+		if (!placement.isValid()) return;
+
+		final java.io.File file = this.chooseSaveFile();
+
+		if (file == null) {
+			return;
+		}
+
+		this.removeLayer();
+
+		this.runAsBackgroundTask(new Runnable() {
+			@Override
+			public void run() {
+				// async part
+				SwingRenderingProgressMonitor monitor = new SwingRenderingProgressMonitor(progressRenderer);
+				LoadPdfDialog.this.saveLayer(file, placement, monitor);
+				progressRenderer.finish();
+			}
+		}, new ActionListener() {
+
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				// sync part
+				LoadPdfDialog.this.setVisible(false);
+			}
+		});
+	}
+
+	private void showAction() {
+		/*
+		 * perform show action
+		 * TODO: is this action valuable? User can do it easy from OSM Main Menu
+		 */
+		if (!placement.isValid()) return;
+
+		// zoom to new location
+		MainApplication.getMap().mapView.zoomTo(placement.getWorldBounds(pdfData));
+		MainApplication.getMap().repaint();
+	}
+
+	private void cancelAction() {
+		/*
+		 * perform cancel action
+		 */
+		removeLayer();
+		setVisible(false);
+	}
+
+	// Implementation methods
+
+	private static JFileChooser loadChooser = null;
+
+	private java.io.File chooseFile() {
+		// get PDF file to load
+		if (loadChooser == null) {
+			loadChooser = new JFileChooser(Preferences.getLoadDir());
+			loadChooser.setAcceptAllFileFilterUsed(false);
+			loadChooser.setMultiSelectionEnabled(false);
+			loadChooser.setFileFilter(new FileFilter() {
+				@Override
+				public boolean accept(java.io.File pathname) {
+					return pathname.isDirectory() || pathname.getName().endsWith(".pdf");
+				}
+
+				@Override
+				public String getDescription() {
+					return tr("PDF files");
+				}
+			});
+		} else {
+			loadChooser.setSelectedFile(null);
+			loadChooser.rescanCurrentDirectory();
+		}
+		int result = loadChooser.showDialog(this, tr("Import PDF"));
+		if (result != JFileChooser.APPROVE_OPTION) {
+			return null;
+		} else {
+			Preferences.setLoadDir(loadChooser.getSelectedFile().getParentFile().getAbsolutePath());
+			return loadChooser.getSelectedFile();
+		}
+	}
+
+	private java.io.File chooseSaveFile() {
+		// get file name
+		JFileChooser fc = new JFileChooser();
+		fc.setAcceptAllFileFilterUsed(true);
+		fc.setMultiSelectionEnabled(false);
+		fc.setFileFilter(new FileFilter() {
+			@Override
+			public boolean accept(java.io.File pathname) {
+				return pathname.isDirectory() || pathname.getName().endsWith(".osm");
+			}
+
+			@Override
+			public String getDescription() {
+				return tr("OSM files");
+			}
+		});
         int result = fc.showOpenDialog(MainApplication.getMainFrame());
 
-        if (result != JFileChooser.APPROVE_OPTION) {
-            return null;
-        } else {
-            return fc.getSelectedFile();
-        }
-    }
-
-    private void runAsBackgroundTask(final Runnable task, final ActionListener after) {
-        /*
-         * run @task in background (asychronosly , run @after when @task has finished
-         */
-        this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-        Thread t = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                task.run();
-
-                SwingUtilities.invokeLater(new Runnable() {
-                    @Override
-                    public void run() {
-                        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-                        after.actionPerformed(null);
-                    }
-                });
-            }
-        });
-        t.start();
-    }
-
-    private PathOptimizer loadPDF(File fileName, ProgressMonitor monitor) {
-        /*
-         * postprocess load PDF-file according to options
-         */
-
-        monitor.beginTask("", 100);
-        monitor.setTicks(0);
-        monitor.setCustomText(tr("Preparing"));
-
-        double nodesTolerance = 0.0;
-        Color color = null;
-        int maxPaths = Integer.MAX_VALUE;
-
-        if (configPanel.mergeCloseNodesCheck.getValue() && configPanel.mergeCloseNodesTolerance.isDataValid()) {
-                nodesTolerance = configPanel.mergeCloseNodesTolerance.getValue();
-        }
-
-        if (configPanel.colorFilterCheck.getValue()) {
-            try {
-                String colString = this.configPanel.colorFilterColor.getText().replace("#", "");
-                color = new Color(Integer.parseInt(colString, 16));
-            } catch (Exception e) {
+		if (result != JFileChooser.APPROVE_OPTION) {
+			return null;
+		} else {
+			return fc.getSelectedFile();
+		}
+	}
+
+	private void runAsBackgroundTask(final Runnable task, final ActionListener after) {
+		/*
+		 * run @task in background (asychronosly , run @after when @task has finished
+		 */
+		this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+		Thread t = new Thread(new Runnable() {
+			@Override
+			public void run() {
+				task.run();
+
+				SwingUtilities.invokeLater(new Runnable() {
+					@Override
+					public void run() {
+						setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+						after.actionPerformed(null);
+					}
+				});
+			}
+		});
+		t.start();
+	}
+
+	private PathOptimizer loadPDF(File fileName, ProgressMonitor monitor) {
+		/*
+		 * postprocess load PDF-file according to options
+		 */
+
+		monitor.beginTask("", 100);
+		monitor.setTicks(0);
+		monitor.setCustomText(tr("Preparing"));
+
+		double nodesTolerance = 0.0;
+		Color color = null;
+		int maxPaths = Integer.MAX_VALUE;
+
+		if (configPanel.mergeCloseNodesCheck.getValue() && configPanel.mergeCloseNodesTolerance.isDataValid()) {
+				nodesTolerance = configPanel.mergeCloseNodesTolerance.getValue();
+		}
+
+		if (configPanel.colorFilterCheck.getValue()) {
+			try {
+				String colString = this.configPanel.colorFilterColor.getText().replace("#", "");
+				color = new Color(Integer.parseInt(colString, 16));
+			} catch (Exception e) {
                 JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Could not parse color"));
-                return null;
-            }
-        }
-
-        if (configPanel.limitPathCountCheck.getValue() && configPanel.limitPathCount.isDataValid()) {
-                maxPaths = configPanel.limitPathCount.getValue();
-        }
-
-        monitor.setTicks(10);
-        monitor.setCustomText(tr("Parsing file"));
-
-        PathOptimizer data = new PathOptimizer(nodesTolerance, color, configPanel.splitOnColorChangeCheck.getValue());
-
-        try {
-            PdfBoxParser parser = new PdfBoxParser(data);
-            parser.parse(fileName, maxPaths, monitor.createSubTaskMonitor(80, false));
-
-        } catch (FileNotFoundException e1) {
-            JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("File not found."));
-            return null;
-        } catch (Exception e) {
-            e.printStackTrace();
-            JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Error while parsing: {0}", e.getMessage()));
-            return null;
-        }
-
-        monitor.setTicks(80);
-
-        if (configPanel.removeParallelSegmentsCheck.getValue() && configPanel.removeParallelSegmentsTolerance.isDataValid()) {
-                double tolerance = configPanel.removeParallelSegmentsTolerance.getValue();
-                monitor.setCustomText(tr("Removing parallel segments"));
-        }
-
-        if (nodesTolerance > 0.0) {
-            monitor.setTicks(83);
-            monitor.setCustomText(tr("Joining nodes"));
-            data.mergeNodes();
-        }
-
-        monitor.setTicks(85);
-        monitor.setCustomText(tr("Joining adjacent segments"));
-        data.mergeSegments();
-
-        if (configPanel.removeSmallObjectsCheck.getValue() && configPanel.removeSmallObjectsSize.isDataValid()) {
-                double tolerance = configPanel.removeSmallObjectsSize.getValue();
-                monitor.setTicks(90);
-                monitor.setCustomText(tr("Removing small objects"));
-
-                data.removeSmallObjects(tolerance);
-
-        }
-
-        if (configPanel.removeLargeObjectsCheck.getValue() && configPanel.removeLargeObjectsSize.isDataValid()) {
-                double tolerance = configPanel.removeLargeObjectsSize.getValue();
-                monitor.setTicks(90);
-                monitor.setCustomText(tr("Removing large objects"));
-                data.removeLargeObjects(tolerance);
-        }
-
-        monitor.setTicks(95);
-        monitor.setCustomText(tr("Finalizing layers"));
-        data.splitLayersByPathKind(configPanel.splitOnShapeClosedCheck.getValue(),
-                configPanel.splitOnSingleSegmentCheck.getValue(),
-                configPanel.splitOnOrthogonalCheck.getValue());
-        data.finish();
-
-        monitor.finishTask();
-        return data;
-    }
-
-    private OsmDataLayer makeLayer(String name, FilePlacement placement, OsmBuilder.Mode mode,
-            ProgressMonitor monitor) {
-        /*
-         * create a layer from data
-         */
-        monitor.beginTask(tr("Building JOSM layer"), 100);
-        OsmBuilder builder = new OsmBuilder(placement);
-        DataSet data = builder.build(pdfData.getLayers(), mode, monitor.createSubTaskMonitor(50, false));
-        data.setUploadPolicy(UploadPolicy.BLOCKED);
-        monitor.setTicks(50);
-        monitor.setCustomText(tr("Postprocessing layer"));
-        OsmDataLayer result = new OsmDataLayer(data, name, null);
-        result.setUploadDiscouraged(true);
-        result.setBackgroundLayer(true);
-        result.onPostLoadFromFile();
-
-        monitor.finishTask();
-        return result;
-    }
-
-        private void removeLayer() {
-        /*
-         * remove preview layer
-         */
-//        if (dataLayer != null) {
-//            MainApplication.getLayerManager().removeLayer(dataLayer);
-//            dataLayer.data.clear(); // saves memory
-//            dataLayer = null;
-//        }
-        Preview.clear();
-        // No layer ==> no actions
-        actionPanel.showButton.setEnabled(false);
-        actionPanel.saveButton.setEnabled(false);
-        actionPanel.okButton.setEnabled(false);
-        placementPanel.setEnabled(false);
-
-    }
-
-    private void saveLayer(java.io.File file, FilePlacement placement, ProgressMonitor monitor) {
-        /*
-         * save layer to file
-         * TODO: is this methode valuable? Functionality can easily performed from Main-Menu
-         */
-        monitor.beginTask(tr("Saving to file."), 1000);
-
-        OsmBuilder builder = new OsmBuilder(placement);
-        DataSet data = builder.build(this.pdfData.getLayers(), OsmBuilder.Mode.Final,
-                monitor.createSubTaskMonitor(500, false));
-        OsmDataLayer layer = new OsmDataLayer(data, file.getName(), file);
-
-        monitor.setCustomText(tr(" Writing to file"));
-        monitor.setTicks(500);
-
-        OsmExporter exporter = new OsmExporter();
-
-        try {
-            exporter.exportData(file, layer);
-        } catch (IOException e) {
-            Logging.error(e);
-        }
-
-        monitor.finishTask();
-    }
+				return null;
+			}
+		}
+
+		if (configPanel.limitPathCountCheck.getValue() && configPanel.limitPathCount.isDataValid()) {
+				maxPaths = configPanel.limitPathCount.getValue();
+		}
+
+		monitor.setTicks(10);
+		monitor.setCustomText(tr("Parsing file"));
+
+		PathOptimizer data = new PathOptimizer(nodesTolerance, color, configPanel.splitOnColorChangeCheck.getValue());
+
+		try {
+			PdfBoxParser parser = new PdfBoxParser(data);
+			parser.parse(fileName, maxPaths, monitor.createSubTaskMonitor(80, false));
+
+		} catch (FileNotFoundException e1) {
+			JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("File not found."));
+			return null;
+		} catch (Exception e) {
+			e.printStackTrace();
+			JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Error while parsing: {0}", e.getMessage()));
+			return null;
+		}
+
+		monitor.setTicks(80);
+
+		if (configPanel.removeParallelSegmentsCheck.getValue() && configPanel.removeParallelSegmentsTolerance.isDataValid()) {
+				double tolerance = configPanel.removeParallelSegmentsTolerance.getValue();
+				monitor.setCustomText(tr("Removing parallel segments"));
+		}
+
+		if (nodesTolerance > 0.0) {
+			monitor.setTicks(83);
+			monitor.setCustomText(tr("Joining nodes"));
+			data.mergeNodes();
+		}
+
+		monitor.setTicks(85);
+		monitor.setCustomText(tr("Joining adjacent segments"));
+		data.mergeSegments();
+
+		if (configPanel.removeSmallObjectsCheck.getValue() && configPanel.removeSmallObjectsSize.isDataValid()) {
+				double tolerance = configPanel.removeSmallObjectsSize.getValue();
+				monitor.setTicks(90);
+				monitor.setCustomText(tr("Removing small objects"));
+
+				data.removeSmallObjects(tolerance);
+
+		}
+
+		if (configPanel.removeLargeObjectsCheck.getValue() && configPanel.removeLargeObjectsSize.isDataValid()) {
+				double tolerance = configPanel.removeLargeObjectsSize.getValue();
+				monitor.setTicks(90);
+				monitor.setCustomText(tr("Removing large objects"));
+				data.removeLargeObjects(tolerance);
+		}
+
+		monitor.setTicks(95);
+		monitor.setCustomText(tr("Finalizing layers"));
+		data.splitLayersByPathKind(configPanel.splitOnShapeClosedCheck.getValue(),
+				configPanel.splitOnSingleSegmentCheck.getValue(),
+				configPanel.splitOnOrthogonalCheck.getValue());
+		data.finish();
+
+		monitor.finishTask();
+		return data;
+	}
+
+	private OsmDataLayer makeLayer(String name, FilePlacement placement, OsmBuilder.Mode mode,
+			ProgressMonitor monitor) {
+		/*
+		 * create a layer from data
+		 */
+		monitor.beginTask(tr("Building JOSM layer"), 100);
+		OsmBuilder builder = new OsmBuilder(placement);
+		DataSet data = builder.build(pdfData.getLayers(), mode, monitor.createSubTaskMonitor(50, false));
+		data.setUploadPolicy(UploadPolicy.BLOCKED);
+		monitor.setTicks(50);
+		monitor.setCustomText(tr("Postprocessing layer"));
+		OsmDataLayer result = new OsmDataLayer(data, name, null);
+		result.setUploadDiscouraged(true);
+		result.setBackgroundLayer(true);
+		result.onPostLoadFromFile();
+
+		monitor.finishTask();
+		return result;
+	}
+
+		private void removeLayer() {
+		/*
+		 * remove preview layer
+		 */
+//		if (dataLayer != null) {
+//			MainApplication.getLayerManager().removeLayer(dataLayer);
+//			dataLayer.data.clear(); // saves memory
+//			dataLayer = null;
+//		}
+		Preview.clear();
+		// No layer ==> no actions
+		actionPanel.showButton.setEnabled(false);
+		actionPanel.saveButton.setEnabled(false);
+		actionPanel.okButton.setEnabled(false);
+		placementPanel.setEnabled(false);
+
+	}
+
+	private void saveLayer(java.io.File file, FilePlacement placement, ProgressMonitor monitor) {
+		/*
+		 * save layer to file
+		 * TODO: is this methode valuable? Functionality can easily performed from Main-Menu
+		 */
+		monitor.beginTask(tr("Saving to file."), 1000);
+
+		OsmBuilder builder = new OsmBuilder(placement);
+		DataSet data = builder.build(this.pdfData.getLayers(), OsmBuilder.Mode.Final,
+				monitor.createSubTaskMonitor(500, false));
+		OsmDataLayer layer = new OsmDataLayer(data, file.getName(), file);
+
+		monitor.setCustomText(tr(" Writing to file"));
+		monitor.setTicks(500);
+
+		OsmExporter exporter = new OsmExporter();
+
+		try {
+			exporter.exportData(file, layer);
+		} catch (IOException e) {
+			Logging.error(e);
+		}
+
+		monitor.finishTask();
+	}
 
 }
Index: /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PathOptimizerConfig.java
===================================================================
--- /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PathOptimizerConfig.java	(revision 34796)
+++ /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PathOptimizerConfig.java	(revision 34796)
@@ -0,0 +1,178 @@
+/**
+ * License: GPL. For details, see LICENSE file.
+ */
+package org.openstreetmap.josm.plugins.pdfimport;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+
+/**
+ * @author Nzara
+ *
+ */
+public class PathOptimizerConfig {
+	/*
+	 * encapsulate options for Path optimizer
+	 * provide GUI
+	 */
+	public GuiFieldBool debugModeCheck;
+	public GuiFieldBool mergeCloseNodesCheck;
+	public GuiFieldDouble mergeCloseNodesTolerance;
+	public GuiFieldBool removeSmallObjectsCheck;
+	public GuiFieldDouble removeSmallObjectsSize;
+	public JTextField colorFilterColor;
+	public GuiFieldBool colorFilterCheck;
+	public GuiFieldBool removeParallelSegmentsCheck;
+	public GuiFieldDouble removeParallelSegmentsTolerance;
+	public GuiFieldBool removeLargeObjectsCheck;
+	public GuiFieldDouble removeLargeObjectsSize;
+	public GuiFieldBool limitPathCountCheck;
+	public GuiFieldInteger limitPathCount;
+	public GuiFieldBool splitOnColorChangeCheck;
+	public GuiFieldBool splitOnShapeClosedCheck;
+	public GuiFieldBool splitOnSingleSegmentCheck;
+	public GuiFieldBool splitOnOrthogonalCheck;
+	protected JPanel panel;
+
+	public PathOptimizerConfig() {
+		build();
+	}
+
+	public JComponent getComponent() {
+		return panel;
+	}
+	
+	public boolean save() {
+		/*
+		 * save to preferences
+		 */
+		Preferences.setDebugTags(debugModeCheck.getValue());
+
+		Preferences.setMergeNodesValue(mergeCloseNodesTolerance.getValue());
+		Preferences.setMergeNodes(mergeCloseNodesCheck.getValue());
+
+		Preferences.setRemoveSmallValue(removeSmallObjectsSize.getValue());
+		Preferences.setRemoveSmall(removeSmallObjectsCheck.getValue());
+
+		Preferences.setRemoveLargeValue(removeLargeObjectsSize.getValue());
+		Preferences.setRemoveLarge(removeLargeObjectsCheck.getValue());
+
+		Preferences.setLimitColorValue(colorFilterColor.getText());
+		Preferences.setLimitColor(colorFilterCheck.getValue());
+
+		Preferences.setRemoveParallelValue(removeParallelSegmentsTolerance.getValue());
+		Preferences.setRemoveParallel(removeParallelSegmentsCheck.getValue());
+
+		Preferences.setLimitPathValue(limitPathCount.getValue());
+		Preferences.setLimitPath(limitPathCountCheck.getValue());
+
+		Preferences.setLayerAttribChange(splitOnColorChangeCheck.getValue());
+		Preferences.setLayerClosed(splitOnShapeClosedCheck.getValue());
+
+		Preferences.setLayerSegment(splitOnSingleSegmentCheck.getValue());
+		Preferences.setLayerOrtho(splitOnOrthogonalCheck.getValue());
+		
+		return true;
+	}
+
+	private void build() {
+
+		debugModeCheck = new GuiFieldBool(tr("Debug info"), Preferences.isDebugTags());
+
+		mergeCloseNodesTolerance = new GuiFieldDouble(Preferences.getMergeNodesValue());
+		mergeCloseNodesCheck = new GuiFieldBool(tr("Merge close nodes"), Preferences.isMergeNodes());
+		mergeCloseNodesCheck.setCompanion(mergeCloseNodesTolerance);
+
+		removeSmallObjectsSize = new GuiFieldDouble(Preferences.getRemoveSmallValue());
+		removeSmallObjectsCheck = new GuiFieldBool(tr("Remove objects smaller than"),Preferences.isRemoveSmall());
+		removeSmallObjectsCheck.setCompanion(removeSmallObjectsSize);
+
+		removeLargeObjectsSize = new GuiFieldDouble((Preferences.getRemoveLargeValue()));
+		removeLargeObjectsCheck = new GuiFieldBool(tr("Remove objects larger than"),Preferences.isRemoveLarge());
+		removeLargeObjectsCheck.setCompanion(removeLargeObjectsSize);
+
+		colorFilterColor = new GuiFieldHex(Preferences.getLimitColorValue());
+		colorFilterCheck = new GuiFieldBool(tr("Only this color"), Preferences.isLimitColor());
+		colorFilterCheck.setCompanion(colorFilterColor);
+
+		removeParallelSegmentsTolerance = new GuiFieldDouble((Preferences.getRemoveParallelValue()));
+		removeParallelSegmentsCheck = new GuiFieldBool(tr("Remove parallel lines"),Preferences.isRemoveParallel());
+		removeParallelSegmentsCheck.setCompanion(removeParallelSegmentsTolerance);
+
+		limitPathCount = new GuiFieldInteger((Preferences.getLimitPathValue()));
+		limitPathCountCheck = new GuiFieldBool(tr("Take only first X paths"),Preferences.isLimitPath());
+		limitPathCountCheck.setCompanion(limitPathCount);
+
+		splitOnColorChangeCheck = new GuiFieldBool(tr("Color/width change"),Preferences.isLayerAttribChange());
+		splitOnShapeClosedCheck = new GuiFieldBool(tr("Shape closed"), Preferences.isLayerClosed());
+
+		splitOnSingleSegmentCheck = new GuiFieldBool(tr("Single segments"), Preferences.isLayerSegment());
+		splitOnOrthogonalCheck = new GuiFieldBool(tr("Orthogonal shapes"), Preferences.isLayerOrtho());
+
+		panel = new JPanel(new GridBagLayout());
+		panel.setBorder(BorderFactory.createTitledBorder(tr("Import settings")));
+
+		GridBagConstraints cBasic = new GridBagConstraints();
+		cBasic.gridx = GridBagConstraints.RELATIVE;
+		cBasic.gridy = GridBagConstraints.RELATIVE;
+		cBasic.insets = new Insets(0, 0, 0, 4);
+		cBasic.anchor = GridBagConstraints.LINE_START;
+		cBasic.fill = GridBagConstraints.HORIZONTAL;
+		cBasic.gridheight = 1;
+		cBasic.gridwidth = 1;
+		cBasic.ipadx = 0;
+		cBasic.ipady = 0;
+		cBasic.weightx = 0.0;
+		cBasic.weighty = 0.0;
+
+		GridBagConstraints cLeft = (GridBagConstraints) cBasic.clone();
+		cLeft.gridx = 0;
+
+		GridBagConstraints cMiddle = (GridBagConstraints) cBasic.clone();
+		cMiddle.gridx = 1;
+		cMiddle.anchor = GridBagConstraints.LINE_END;
+
+		GridBagConstraints cRight = (GridBagConstraints) cBasic.clone();
+		cRight.gridx = 2;
+
+		panel.add(mergeCloseNodesCheck, cLeft);
+		panel.add(new JLabel(tr("Tolerance:"),SwingConstants.RIGHT), cMiddle);
+		panel.add(mergeCloseNodesTolerance, cRight);
+
+		panel.add(removeSmallObjectsCheck, cLeft);
+		panel.add(new JLabel(tr("Tolerance:"),SwingConstants.RIGHT), cMiddle);
+		panel.add(removeSmallObjectsSize, cRight);
+
+		panel.add(removeLargeObjectsCheck, cLeft);
+		panel.add(new JLabel(tr("Tolerance:"),SwingConstants.RIGHT), cMiddle);
+		panel.add(removeLargeObjectsSize, cRight);
+
+		panel.add(removeParallelSegmentsCheck, cLeft);
+		panel.add(new JLabel(tr("Max distance:"),SwingConstants.RIGHT), cMiddle);
+		panel.add(removeParallelSegmentsTolerance, cRight);
+
+		panel.add(limitPathCountCheck, cLeft);
+		panel.add(limitPathCount, cRight);
+
+		panel.add(colorFilterCheck, cLeft);
+		panel.add(colorFilterColor, cRight);
+
+		panel.add(debugModeCheck, cLeft);
+
+		cLeft.gridy = 8; panel.add(new JLabel(tr("Introduce separate layers for:")), cLeft);
+		cMiddle.gridy = 8; panel.add(splitOnShapeClosedCheck, cMiddle);
+		cRight.gridy = 8; panel.add(splitOnSingleSegmentCheck, cRight);
+		cMiddle.gridy = 9; panel.add(splitOnColorChangeCheck, cMiddle);
+		cRight.gridy = 9;panel.add(splitOnOrthogonalCheck, cRight);
+	}
+}
Index: /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PdfImportPlugin.java
===================================================================
--- /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PdfImportPlugin.java	(revision 34795)
+++ /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PdfImportPlugin.java	(revision 34796)
@@ -5,7 +5,4 @@
 import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
@@ -14,41 +11,18 @@
  * A plugin to import a PDF file.
  */
+
 public class PdfImportPlugin extends Plugin {
 
-    public PdfImportPlugin(PluginInformation info) {
-        super(info);
-        MainMenu.add(MainApplication.getMenu().imagerySubMenu, new PdfImportAction());
-        new Preferences(getPluginInformation().name);
-    }
 
-    public static class pdfimportPrefs implements SubPreferenceSetting {
-        @Override
-        public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
-            return null;
-        }
+	public PdfImportPlugin(PluginInformation info) {
+		super(info);
+		MainMenu.add(MainApplication.getMenu().imagerySubMenu, new PdfImportAction());
+		new Preferences(getPluginInformation().name);
+	}
 
-        @Override
-        public void addGui(PreferenceTabbedPane gui) {
-            return;
-        }
-
-        @Override
-        public boolean ok() {
-            return false;
-        }
-
-        @Override
-        public boolean isExpert() {
-            return false;
-        }
-    }
-
-    @Override
-    public PreferenceSetting getPreferenceSetting() {
-        /*
-         * TODO: implement it
-         */
-        return new pdfimportPrefs();
-        }
+	@Override
+	public PreferenceSetting getPreferenceSetting() {
+		return new PreferenceSettings();
+		}
 
 }
Index: /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettings.java
===================================================================
--- /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettings.java	(revision 34796)
+++ /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettings.java	(revision 34796)
@@ -0,0 +1,50 @@
+/**
+ * License: GPL. For details, see LICENSE file.
+ */
+package org.openstreetmap.josm.plugins.pdfimport;
+
+import java.awt.Container;
+import java.awt.Dimension;
+
+import javax.swing.Box;
+import javax.swing.JScrollPane;
+
+import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
+import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
+
+public class PreferenceSettings implements SubPreferenceSetting {
+	
+	private PreferenceSettingsGui guiSetting = new PreferenceSettingsGui();
+	private PreferenceSettingsProcessing processingSettings = new PreferenceSettingsProcessing();
+	
+	@Override
+	public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui)
+	{
+	    return gui.getPluginPreference();
+	}
+
+	@Override
+	public void addGui(PreferenceTabbedPane gui) {
+		Container container = Box.createVerticalBox();
+		container.add(guiSetting.getGui());
+		container.add(processingSettings.getGui());
+		container.add(new Box.Filler(new Dimension(), new Dimension(), new Dimension(0,Integer.MAX_VALUE)));
+		synchronized (gui.getPluginPreference().getTabPane()) {
+			gui.getPluginPreference().addSubTab(this, "PdfImport", new JScrollPane(container));
+		}
+		return;
+	}
+
+	@Override
+	public boolean ok() {
+		guiSetting.save();
+		processingSettings.save();
+		return false;
+	}
+
+	@Override
+	public boolean isExpert() {
+		return false;
+	}
+}
Index: /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettingsGui.java
===================================================================
--- /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettingsGui.java	(revision 34796)
+++ /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettingsGui.java	(revision 34796)
@@ -0,0 +1,82 @@
+/**
+ * License: GPL. For details, see LICENSE file.
+ */
+package org.openstreetmap.josm.plugins.pdfimport;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.FlowLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.openstreetmap.josm.tools.GBC;
+
+/**
+ * @author Nzara
+ *
+ */
+public class PreferenceSettingsGui {
+
+	private class ModeChoice {
+		public Preferences.GuiMode guiMode;
+		public String name;
+
+		ModeChoice(Preferences.GuiMode guiMode, String name) {
+			this.guiMode = guiMode;
+			this.name = name;
+		}
+
+		public String toString() {
+			return name;
+		}
+	}
+
+	private ModeChoice[] choices = { 
+			new ModeChoice(Preferences.GuiMode.Auto, tr("Auto")),
+			new ModeChoice(Preferences.GuiMode.Simple, tr("Basic")),
+			new ModeChoice(Preferences.GuiMode.Expert, tr("Extended"))
+			};
+
+	private final String guiAuto = tr("Auto");
+	private final String guiBasic = tr("Basic");
+	private final String guiExtended = tr("Extended");
+			
+	private String[] guiPrefs = {guiAuto, guiBasic, guiExtended};
+	private JComboBox<String> guiPrefsCombo = new JComboBox<>(guiPrefs);
+	private JPanel panel;
+
+	public JPanel getGui() {
+		if (panel == null)
+			build();
+		int guiCode = Preferences.getGuiCode();
+		if (guiCode == 1) guiPrefsCombo.setSelectedItem(guiExtended);
+		if (guiCode == 2) guiPrefsCombo.setSelectedItem(guiBasic);
+		return panel;
+	}
+
+	public boolean save() {
+		String s = (String) guiPrefsCombo.getSelectedItem();
+		if (s==guiAuto) Preferences.setGuiCode(0);
+		if (s==guiBasic) Preferences.setGuiCode(2);
+		if (s==guiExtended) Preferences.setGuiCode(1);
+		
+		return true;
+	}
+
+	private void build() {
+		panel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+//		panel.setAlignmentX(Component.LEFT_ALIGNMENT);
+		panel.setBorder(BorderFactory.createTitledBorder(tr("User Interface")));
+		JLabel l = new JLabel(tr("Interactions:"));
+		panel.add(l, GBC.std());
+		panel.add(guiPrefsCombo, GBC.eop());
+		guiPrefsCombo.setBackground(Color.red);
+		guiPrefsCombo.setAlignmentX(Component.RIGHT_ALIGNMENT);
+	}
+
+}
Index: /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettingsProcessing.java
===================================================================
--- /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettingsProcessing.java	(revision 34796)
+++ /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/PreferenceSettingsProcessing.java	(revision 34796)
@@ -0,0 +1,30 @@
+/**
+ * License: GPL. For details, see LICENSE file.
+ */
+package org.openstreetmap.josm.plugins.pdfimport;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Component;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.openstreetmap.josm.tools.GBC;
+
+/**
+ * @author Nzara
+ *
+ */
+public class PreferenceSettingsProcessing extends PathOptimizerConfig{
+	
+	public PreferenceSettingsProcessing() {
+		super();
+		panel.setBorder(BorderFactory.createTitledBorder(tr("Processing defaults")));
+	}
+	public JPanel getGui() {
+		return panel;
+	}
+	
+}
Index: /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/Preferences.java
===================================================================
--- /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/Preferences.java	(revision 34795)
+++ /applications/editors/josm/plugins/pdfimport/src/org/openstreetmap/josm/plugins/pdfimport/Preferences.java	(revision 34796)
@@ -8,115 +8,193 @@
 public class Preferences {
 
-    public enum GuiMode {
-        Auto, Expert, Simple
-    }
-
-    public static String getLoadDir() {
-        return Config.getPref().get(Preferences.prefix + "loadDir");
-    }
-
-    public static void setLoadDir(String loadDir) {
-        Config.getPref().put(Preferences.prefix + "loadDir", loadDir);
-    }
-
-    public static GuiMode getGuiMode() {
-        int GuiCode = Config.getPref().getInt(Preferences.prefix + "guiCode", 0);
-        switch (GuiCode) {
-        case -1:
-        case 1:
-            return GuiMode.Expert;
-        case 2:
-            return GuiMode.Simple;
-        default:
-            if (Config.getPref().getBoolean("expert"))
-                return GuiMode.Expert;
-            else
-                return GuiMode.Simple;
-        }
-    }
-
-    public static boolean isLegacyActions() {
-        return (Config.getPref().getInt(Preferences.prefix + "guiCode", 0) == -1);
-    }
-
-    public static boolean isMergeNodes() {
-        return Config.getPref().getBoolean(Preferences.prefix + "mergeNodes");
-    }
-
-    public static double getMergeNodesValue() {
-        return Config.getPref().getDouble(Preferences.prefix + "mergeNodes.value", 1e-3);
-    }
-
-    public static boolean isRemoveSmall() {
-        return Config.getPref().getBoolean(Preferences.prefix + "removeSmall");
-    }
-
-    public static double getRemoveSmallValue() {
-        return Config.getPref().getDouble(Preferences.prefix + "removeSmall.value", 1);
-    }
-
-    public static boolean isRemoveLarge() {
-        return Config.getPref().getBoolean(Preferences.prefix + "removeLarge");
-    }
-
-    public static double getRemoveLargeValue() {
-        return Config.getPref().getDouble(Preferences.prefix + "removeLarge.value", 10);
-    }
-
-    public static boolean isRemoveParallel() {
-        return Config.getPref().getBoolean(Preferences.prefix + "removeParallel");
-    }
-
-    public static double getRemoveParallelValue() {
-        return Config.getPref().getDouble(Preferences.prefix + "removeParallel.value", 3);
-    }
-
-    public static boolean isLimitPath() {
-        return Config.getPref().getBoolean(Preferences.prefix + "limitPath");
-    }
-
-    public static int getLimitPathValue() {
-        return Config.getPref().getInt(Preferences.prefix + "limitPath.value", Integer.MAX_VALUE);
-    }
-
-    public static boolean isLimitColor() {
-        return Config.getPref().getBoolean(Preferences.prefix + "limitColor");
-    }
-
-    public static String getLimitColorValue() {
-        return Config.getPref().get(Preferences.prefix + "limitColor.value","#000000");
-    }
-
-    public static boolean isDebugTags() {
-        return Config.getPref().getBoolean(Preferences.prefix + "debugTags");
-    }
-
-    public static boolean isLayerClosed() {
-        return Config.getPref().getBoolean(Preferences.prefix + "layerClosed");
-    }
-
-    public static boolean isLayerSegment() {
-        return Config.getPref().getBoolean(Preferences.prefix + "layerSegment");
-    }
-
-    public static boolean isLayerAttribChange() {
-        return Config.getPref().getBoolean(Preferences.prefix + "layerAttribChanges");
-    }
-
-    public static boolean isLayerOrtho() {
-        return Config.getPref().getBoolean(Preferences.prefix + "layerOrtho");
-    }
-
-    protected static int GuiCode;
-
-    private static String prefix;
-
-    private Preferences() {
-        return;
-    }
-
-    public Preferences (String p) {
-        prefix = p + "." ;
-    }
+	public enum GuiMode {
+		Auto, Expert, Simple
+	};
+
+	public static String getLoadDir() {
+		return Config.getPref().get(Preferences.prefix + "loadDir");
+	}
+
+	public static void setLoadDir(String loadDir) {
+		Config.getPref().put(Preferences.prefix + "loadDir", loadDir);
+	}
+
+	public static GuiMode getGuiMode() {
+		int GuiCode = Config.getPref().getInt(Preferences.prefix + "guiCode", 0);
+		switch (GuiCode) {
+		case -1:
+		case 1:
+			return GuiMode.Expert;
+		case 2:
+			return GuiMode.Simple;
+		default:
+			if (Config.getPref().getBoolean("expert"))
+				return GuiMode.Expert;
+			else
+				return GuiMode.Simple;
+		}
+	}
+
+	public static void setGuiCode(int guiCode) {
+		Config.getPref().putInt(Preferences.prefix + "guiCode", guiCode);
+	}
+
+	public static int getGuiCode() {
+		int GuiCode = Config.getPref().getInt(Preferences.prefix + "guiCode", 0);
+		return GuiCode;
+	}
+
+	public static boolean isLegacyActions() {
+		return (Config.getPref().getInt(Preferences.prefix + "guiCode", 0) == -1);
+	}
+
+	public static void setMergeNodes(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "mergeNodes",v);
+	}
+
+	public static boolean isMergeNodes() {
+		return Config.getPref().getBoolean(Preferences.prefix + "mergeNodes");
+	}
+
+	public static double getMergeNodesValue() {
+		return Config.getPref().getDouble(Preferences.prefix + "mergeNodes.value", 1e-3);
+	}
+
+	public static void setMergeNodesValue(double v) {
+		Config.getPref().putDouble(Preferences.prefix + "mergeNodes.value", v);
+	}
+
+	public static boolean isRemoveSmall() {
+		return Config.getPref().getBoolean(Preferences.prefix + "removeSmall");
+	}
+
+	public static void setRemoveSmall(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "removeSmall",v);
+	}
+
+	public static double getRemoveSmallValue() {
+		return Config.getPref().getDouble(Preferences.prefix + "removeSmall.value", 1);
+	}
+
+	public static void setRemoveSmallValue(double v) {
+		Config.getPref().putDouble(Preferences.prefix + "removeSmall.value", v);
+	}
+
+	public static boolean isRemoveLarge() {
+		return Config.getPref().getBoolean(Preferences.prefix + "removeLarge");
+	}
+
+	public static void setRemoveLarge(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "removeLarge",v);
+	}
+
+	public static double getRemoveLargeValue() {
+		return Config.getPref().getDouble(Preferences.prefix + "removeLarge.value", 10);
+	}
+
+	public static void setRemoveLargeValue(double v) {
+		Config.getPref().putDouble(Preferences.prefix + "removeLarge.value", v);
+	}
+
+	public static boolean isRemoveParallel() {
+		return Config.getPref().getBoolean(Preferences.prefix + "removeParallel");
+	}
+
+	public static void setRemoveParallel(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "removeParallel",v);
+	}
+
+	public static double getRemoveParallelValue() {
+		return Config.getPref().getDouble(Preferences.prefix + "removeParallel.value", 3);
+	}
+
+	public static void setRemoveParallelValue(double v) {
+		Config.getPref().putDouble(Preferences.prefix + "removeParallel.value", v);
+	}
+
+	public static boolean isLimitPath() {
+		return Config.getPref().getBoolean(Preferences.prefix + "limitPath");
+	}
+
+	public static void setLimitPath(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "limitPath",v);
+	}
+
+	public static int getLimitPathValue() {
+		return Config.getPref().getInt(Preferences.prefix + "limitPath.value", Integer.MAX_VALUE);
+	}
+
+	public static void setLimitPathValue(int v) {
+		Config.getPref().putInt(Preferences.prefix + "limitPath.value", v);
+	}
+
+	public static boolean isLimitColor() {
+		return Config.getPref().getBoolean(Preferences.prefix + "limitColor");
+	}
+
+	public static void setLimitColor(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "limitColor",v);
+	}
+
+	public static String getLimitColorValue() {
+		return Config.getPref().get(Preferences.prefix + "limitColor.value", "#000000");
+	}
+
+	public static void setLimitColorValue(String v) {
+		Config.getPref().put(Preferences.prefix + "limitColor.value", v);
+	}
+
+	public static boolean isDebugTags() {
+		return Config.getPref().getBoolean(Preferences.prefix + "debugTags");
+	}
+
+	public static void setDebugTags(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "debugTags",v);
+	}
+
+	public static boolean isLayerClosed() {
+		return Config.getPref().getBoolean(Preferences.prefix + "layerClosed");
+	}
+
+	public static void setLayerClosed(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "layerClosed",v);
+	}
+
+	public static boolean isLayerSegment() {
+		boolean v =Config.getPref().getBoolean(Preferences.prefix + "layerSegment");
+		return Config.getPref().getBoolean(Preferences.prefix + "layerSegment");
+	}
+
+	public static void setLayerSegment(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "layerSegment",v);
+	}
+
+	public static boolean isLayerAttribChange() {
+		return Config.getPref().getBoolean(Preferences.prefix + "layerAttribChanges");
+	}
+
+	public static void setLayerAttribChange(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "layerAttribChanges",v);
+	}
+
+	public static boolean isLayerOrtho() {
+		return Config.getPref().getBoolean(Preferences.prefix + "layerOrtho");
+	}
+
+	public static void setLayerOrtho(boolean v) {
+		Config.getPref().putBoolean(Preferences.prefix + "layerOrtho",v);
+	}
+
+	protected static int GuiCode;
+
+	private static String prefix;
+
+	private Preferences() {
+		return;
+	}
+
+	public Preferences(String p) {
+		prefix = p + ".";
+	}
 
 }
