Index: applications/editors/josm/plugins/pdfimport/.classpath
===================================================================
--- applications/editors/josm/plugins/pdfimport/.classpath	(revision 28445)
+++ applications/editors/josm/plugins/pdfimport/.classpath	(revision 28446)
@@ -2,4 +2,5 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="resources"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/JOSM"/>
Index: applications/editors/josm/plugins/pdfimport/JOSM-pdfimport.launch
===================================================================
--- applications/editors/josm/plugins/pdfimport/JOSM-pdfimport.launch	(revision 28446)
+++ applications/editors/josm/plugins/pdfimport/JOSM-pdfimport.launch	(revision 28446)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/JOSM/src/org/openstreetmap/josm/gui/MainApplication.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK 6"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.openstreetmap.josm.gui.MainApplication"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="JOSM-pdfimport"/>
+</launchConfiguration>
Index: applications/editors/josm/plugins/pdfimport/build.xml
===================================================================
--- applications/editors/josm/plugins/pdfimport/build.xml	(revision 28445)
+++ applications/editors/josm/plugins/pdfimport/build.xml	(revision 28446)
@@ -33,5 +33,5 @@
     <property name="commit.message" value="Initial pdfimport version"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="4980"/>
+    <property name="plugin.main.version" value="5236"/>
     <!-- compilation properties -->
     <property name="josm.build.dir" value="../../core"/>
@@ -113,8 +113,8 @@
     </target>
     <!--
-    ************************** Publishing the plugin *********************************** 
+    ************************** Publishing the plugin ***********************************
     -->
     <!--
-        ** extracts the JOSM release for the JOSM version in ../core and saves it in the 
+        ** extracts the JOSM release for the JOSM version in ../core and saves it in the
         ** property ${coreversion.info.entry.revision}
         **
@@ -162,15 +162,15 @@
     </target>
     <!--
-        ** commits the plugin.jar 
+        ** commits the plugin.jar
         -->
     <target name="commit-dist">
         <echo>
     ***** Properties of published ${plugin.jar} *****
-    Commit message    : '${commit.message}'                 
+    Commit message    : '${commit.message}'
     Plugin-Mainversion: ${plugin.main.version}
     JOSM build version: ${coreversion.info.entry.revision}
     Plugin-Version    : ${version.entry.commit.revision}
-    ***** / Properties of published ${plugin.jar} *****                 
-                        
+    ***** / Properties of published ${plugin.jar} *****
+
     Now commiting ${plugin.jar} ...
     </echo>
Index: applications/editors/josm/plugins/pdfimport/src/pdfimport/FilePlacement.java
===================================================================
--- applications/editors/josm/plugins/pdfimport/src/pdfimport/FilePlacement.java	(revision 28445)
+++ applications/editors/josm/plugins/pdfimport/src/pdfimport/FilePlacement.java	(revision 28446)
@@ -5,6 +5,4 @@
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Point2D;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.Properties;
 
@@ -13,7 +11,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.Projection;
-import org.openstreetmap.josm.data.projection.ProjectionSubPrefs;
-import org.openstreetmap.josm.data.projection.Projections;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.data.projection.ProjectionInfo;
 
 public class FilePlacement {
@@ -46,30 +42,8 @@
 	}
 
-	private String fromCollection(Collection<String> val) {
-		if (val != null && !val.isEmpty())
-		    return Utils.join("\u001e", val);
-		return null;
-	}
-
-	private Collection<String> toCollection(String s) {
-		if (s != null && s.length() != 0) {
-			return Arrays.asList(s.split("\u001e", -1));
-		}
-		return null;
-	}
-
 	public Properties toProperties() {
 		Properties p = new Properties();
 		if (projection != null) {
-			p.setProperty("Projection", projection.getClass().getCanonicalName());
-
-			if (projection instanceof ProjectionSubPrefs) {
-				ProjectionSubPrefs projPrefs = (ProjectionSubPrefs) projection;
-				String code = projection.toCode();
-				String prefs = fromCollection(projPrefs.getPreferencesFromCode(code));
-				if (prefs != null) {
-				    p.setProperty("ProjectionPrefs", prefs);
-				}
-			}
+			p.setProperty("Projection", projection.toCode());
 		}
 
@@ -87,25 +61,9 @@
 
 	public void fromProperties(Properties p){
-
-		String className = p.getProperty("Projection", null);
-		projection = null;
-
-		if (className != null) {
-			for(Projection proj: Projections.getProjections()){
-				if (proj.getClass().getCanonicalName().equals(className)){
-					projection = proj;
-					break;
-				}
-			}
-			if (projection instanceof ProjectionSubPrefs) {
-				ProjectionSubPrefs projPrefs = (ProjectionSubPrefs) projection;
-
-				String s;
-				s = p.getProperty("ProjectionPrefs", null);
-				Collection<String> prefs = toCollection(s);
-				if (prefs != null) {
-				    projPrefs.setPreferences(prefs);
-				}
-			}
+		String projectionCode = p.getProperty("Projection", null);
+		if (projectionCode != null) {
+			projection = ProjectionInfo.getProjectionByCode(projectionCode);
+		} else {
+			projection = null;
 		}
 
Index: applications/editors/josm/plugins/pdfimport/src/pdfimport/LoadPdfDialog.java
===================================================================
--- applications/editors/josm/plugins/pdfimport/src/pdfimport/LoadPdfDialog.java	(revision 28445)
+++ applications/editors/josm/plugins/pdfimport/src/pdfimport/LoadPdfDialog.java	(revision 28446)
@@ -1,7 +1,7 @@
 package pdfimport;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.BorderLayout;
-import static org.openstreetmap.josm.tools.I18n.tr;
-
 import java.awt.Color;
 import java.awt.Component;
@@ -24,6 +24,6 @@
 import java.util.Collection;
 import java.util.Properties;
+
 import javax.swing.AbstractAction;
-
 import javax.swing.BorderFactory;
 import javax.swing.BoxLayout;
@@ -50,13 +50,11 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.projection.Projection;
-import org.openstreetmap.josm.data.projection.Projections;
-import org.openstreetmap.josm.data.projection.ProjectionSubPrefs;
+import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.preferences.projection.ProjectionChoice;
+import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressRenderer;
 import org.openstreetmap.josm.gui.progress.SwingRenderingProgressMonitor;
-import org.openstreetmap.josm.gui.SideButton;
-import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
 import org.openstreetmap.josm.io.OsmExporter;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -82,16 +80,20 @@
 		}
 
+		@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;
@@ -99,4 +101,5 @@
 		}
 
+		@Override
 		public void setValue(int value) {
 			this.pBar.setValue(value);
@@ -168,4 +171,5 @@
 
 		this.projectionCombo.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				updateProjectionPrefButton();
@@ -174,4 +178,5 @@
 		});
 		this.projectionPreferencesButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				showProjectionPreferences();
@@ -180,4 +185,5 @@
 
 		this.loadFileButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				loadFilePressed();
@@ -186,4 +192,5 @@
 
 		this.okButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				okPressed();
@@ -192,4 +199,5 @@
 
 		this.saveButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				savePressed();
@@ -198,4 +206,5 @@
 
 		this.showButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				showPressed();
@@ -204,4 +213,5 @@
 
 		this.cancelButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				cancelPressed();
@@ -218,4 +228,5 @@
 
 		this.getMinButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				getMinPressed();
@@ -224,4 +235,5 @@
 
 		this.getMaxButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				getMaxPressed();
@@ -236,6 +248,5 @@
 
 		this.projectionCombo = new JComboBox();
-		this.projectionCombo.addItem(tr("Select projection..."));
-		for (Projection p: Projections.getProjections()) {
+		for (ProjectionChoice p: ProjectionPreference.getProjectionChoices()) {
 			this.projectionCombo.addItem(p);
 		}
@@ -419,10 +430,10 @@
 
 	private class ProjectionSubPrefsDialog extends JDialog {
-		private ProjectionSubPrefs projPref;
+		private final ProjectionChoice projPref;
 		private OKAction actOK;
 		private CancelAction actCancel;
 		private JPanel projPrefPanel;
 
-		public ProjectionSubPrefsDialog(Component parent, ProjectionSubPrefs pr) {
+		public ProjectionSubPrefsDialog(Component parent, ProjectionChoice pr) {
 			super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
 
@@ -442,7 +453,5 @@
 
 		protected JPanel buildInputForm() {
-			JPanel pnl = new JPanel();
-			projPref.setupPreferencePanel(pnl, null);
-			return pnl;
+			return projPref.getPreferencePanel(null);
 		}
 
@@ -480,4 +489,5 @@
 			}
 
+			@Override
 			public void actionPerformed(ActionEvent e) {
 			projPref.setPreferences(projPref.getPreferences(projPrefPanel));
@@ -493,4 +503,5 @@
 			}
 
+			@Override
 			public void actionPerformed(ActionEvent e) {
 			setVisible(false);
@@ -512,22 +523,21 @@
 
 	private void updateProjectionPrefButton() {
-		Object proj = projectionCombo.getSelectedItem();
-
+//		ProjectionChoice proj = (ProjectionChoice) projectionCombo.getSelectedItem();
+
+		//TODO
 		// Enable/disable pref button
-		if(!(proj instanceof ProjectionSubPrefs)) {
-			projectionPreferencesButton.setEnabled(false);
-		} else {
+//		if(!(proj instanceof ProjectionSubPrefs)) {
+//			projectionPreferencesButton.setEnabled(false);
+//		} else {
 			projectionPreferencesButton.setEnabled(true);
-		}
+//		}
 	}
 
 	private void showProjectionPreferences() {
-		Object proj = projectionCombo.getSelectedItem();
-
-		if(proj instanceof ProjectionSubPrefs) {
-			ProjectionSubPrefsDialog dlg =
-			new ProjectionSubPrefsDialog(this, (ProjectionSubPrefs)proj);
-			dlg.setVisible(true);
-		}
+		ProjectionChoice proj = (ProjectionChoice) projectionCombo.getSelectedItem();
+
+		ProjectionSubPrefsDialog dlg = new ProjectionSubPrefsDialog(this, proj);
+		dlg.setVisible(true);
+
 	}
 
@@ -546,4 +556,5 @@
 		this.runAsBackgroundTask(
 				new Runnable() {
+					@Override
 					public void run() {
 						//async part
@@ -563,4 +574,5 @@
 				new ActionListener() {
 
+					@Override
 					public void actionPerformed(ActionEvent e) {
 						//sync part
@@ -608,4 +620,5 @@
 		this.runAsBackgroundTask(
 				new Runnable() {
+					@Override
 					public void run() {
 						//async part
@@ -617,4 +630,5 @@
 				new ActionListener() {
 
+					@Override
 					public void actionPerformed(ActionEvent e) {
 						//sync part
@@ -643,4 +657,5 @@
 		this.runAsBackgroundTask(
 				new Runnable() {
+					@Override
 					public void run() {
 						//async part
@@ -652,4 +667,5 @@
 				new ActionListener() {
 
+					@Override
 					public void actionPerformed(ActionEvent e) {
 						//sync part
@@ -769,8 +785,10 @@
 		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));
@@ -930,7 +948,7 @@
 
 	private FilePlacement parsePlacement() {
-		Object selectedProjection = this.projectionCombo.getSelectedItem();
-
-		if (!(selectedProjection instanceof Projection))
+		ProjectionChoice selectedProjection = (ProjectionChoice) this.projectionCombo.getSelectedItem();
+
+		if (selectedProjection == null)
 		{
 			JOptionPane.showMessageDialog(Main.parent, tr("Please set a projection."));
@@ -940,5 +958,5 @@
 		FilePlacement placement = new FilePlacement();
 
-		placement.projection = (Projection)this.projectionCombo.getSelectedItem();
+		placement.projection = selectedProjection.getProjection();
 
 		try
@@ -970,5 +988,18 @@
 		}
 
-		this.projectionCombo.setSelectedItem(placement.projection);
+		if (placement.projection != null) {
+			String projectionCode = placement.projection.toCode();
+			BIG_LOOP:
+			for (ProjectionChoice projectionChoice: ProjectionPreference.getProjectionChoices()) {
+				for (String code: projectionChoice.allCodes()) {
+					if (code.equals(projectionCode)) {
+						projectionChoice.getPreferencesFromCode(projectionCode);
+						this.projectionCombo.setSelectedItem(projectionChoice);
+						break BIG_LOOP;
+					}
+				}
+			}
+		}
+
 		this.minXField.setText(Double.toString(placement.minX));
 		this.maxXField.setText(Double.toString(placement.maxX));
