Index: applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/IncompleteMembersDownloadThread.java
===================================================================
--- applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/IncompleteMembersDownloadThread.java	(revision 32540)
+++ applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/IncompleteMembersDownloadThread.java	(revision 32554)
@@ -21,8 +21,4 @@
 	}
 
-	@SuppressWarnings("unused")
-	private void realRun() {
-		// TODO
-	}
 
 	@Override
@@ -40,17 +36,4 @@
 					if (RouteUtils.isTwoDirectionRoute(currentRelation)) {
 						list.add(currentRelation);
-//						for (RelationMember rm : currentRelation.getMembers()) {
-//							if (rm.hasRole("stop") || rm.hasRole("stop_entry_only") || rm.hasRole("stop_exit_only")
-//									|| rm.hasRole("platform") || rm.hasRole("platform_entry_only")
-//									|| rm.hasRole("platform_exit_only")) {
-//								List<OsmPrimitive> referrers = rm.getMember().getReferrers();
-//								for (OsmPrimitive referrer : referrers) {
-//									if (referrer.getType().equals(OsmPrimitiveType.RELATION)
-//											&& referrer.hasTag("public_transport", "stop_area")) {
-//										list.add(referrer);
-//									}
-//								}
-//							}
-//						}
 					}
 				}
Index: applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/IncompleteMembersDownloadDialog.java
===================================================================
--- applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/IncompleteMembersDownloadDialog.java	(revision 32540)
+++ applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/IncompleteMembersDownloadDialog.java	(revision 32554)
@@ -6,5 +6,4 @@
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
-import javax.swing.SwingUtilities;
 
 public class IncompleteMembersDownloadDialog extends JPanel {
@@ -26,9 +25,7 @@
 	private int selectedOption;
 
-	public IncompleteMembersDownloadDialog(long id) {
+	public IncompleteMembersDownloadDialog() {
+		
 		selectedOption = Integer.MIN_VALUE;
-
-//		message = tr("The relation (id={0}) has incomplete members.\n"+
-//		    "They need to be downloaded to proceed with validation of this relation.\nDo you want to download incomplete members?", id);
 		message = tr("Route relations have incomplete members.\nThey need to be downloaded to proceed with validation.\nDo you want to download them?");
 		checkbox = new JCheckBox(tr("Remember my choice and do not ask me again in this session"));
@@ -56,7 +53,5 @@
 		}
 
-		// this.createDialog(); // FIXME
 		
-
 		Object[] params = {message, checkbox};
 		selectedOption = JOptionPane.showOptionDialog(this, params, tr("PT_Assistant Fetch Request"), JOptionPane.YES_NO_OPTION,
@@ -74,20 +69,3 @@
 	}
 
-	@SuppressWarnings("unused")
-	private void createDialog() {
-		if (!SwingUtilities.isEventDispatchThread()) {
-			Object[] params = {message, checkbox};
-			selectedOption = JOptionPane.showOptionDialog(null, params, tr("Fetch Request"), JOptionPane.YES_NO_OPTION,
-					JOptionPane.QUESTION_MESSAGE, null, options, 0);
-		} else {
-			SwingUtilities.invokeLater(new Runnable() {
-				@Override
-				public void run() {
-					createDialog();
-				}
-			});
-
-		}
-	}
-
 }
Index: applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java
===================================================================
--- applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java	(revision 32540)
+++ applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java	(revision 32554)
@@ -3,8 +3,10 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.command.Command;
@@ -40,5 +42,5 @@
 		layer = new PTAssistantLayer();
 		DataSet.addSelectionListener(layer);
-		
+
 	}
 
@@ -50,10 +52,13 @@
 		}
 
-		// Download incomplete members. If the download does not work, finish.
+		// Download incomplete members. If the download does not work, return
+		// and do not do any testing.
 		if (r.hasIncompleteMembers()) {
-			boolean downloadSuccessful = this.downloadIncompleteMembers(r);
+
+			boolean downloadSuccessful = this.downloadIncompleteMembers();
 			if (!downloadSuccessful) {
 				return;
 			}
+
 		}
 
@@ -61,5 +66,4 @@
 			return;
 		}
-		
 
 		// Check individual ways using the oneway direction test and the road
@@ -86,11 +90,35 @@
 	 * @return true if successful, false if not successful
 	 */
-	private boolean downloadIncompleteMembers(Relation r) {
-		IncompleteMembersDownloadDialog incompleteMembersDownloadDialog = new IncompleteMembersDownloadDialog(
-				r.getId());
-
-		int userInput = incompleteMembersDownloadDialog.getUserSelection();
-
-		if (userInput == JOptionPane.YES_OPTION) {
+	private boolean downloadIncompleteMembers() {
+
+		final int[] userSelection = { 0 };
+
+		try {
+
+			if (SwingUtilities.isEventDispatchThread()) {
+
+				userSelection[0] = realDownloadIncompleteMembers();
+
+			} else {
+
+				SwingUtilities.invokeAndWait(new Runnable() {
+					@Override
+					public void run() {
+						try {
+							userSelection[0] = realDownloadIncompleteMembers();
+						} catch (InterruptedException e) {
+							e.printStackTrace();
+						}
+
+					}
+				});
+
+			}
+
+		} catch (InterruptedException | InvocationTargetException e) {
+			return false;
+		}
+
+		if (userSelection[0] == JOptionPane.YES_OPTION) {
 
 			Thread t = new IncompleteMembersDownloadThread();
@@ -100,12 +128,25 @@
 					t.wait();
 				} catch (InterruptedException e) {
-					// TODO: give the user a message that testing stops
 					return false;
 				}
 			}
-			return true;
-		}
-
-		return false;
+
+		}
+
+		return true;
+
+	}
+
+	/**
+	 * Shows the dialog asking the user about an incomplete member download
+	 * 
+	 * @return user's selection
+	 * @throws InterruptedException
+	 */
+	private int realDownloadIncompleteMembers() throws InterruptedException {
+
+		IncompleteMembersDownloadDialog incompleteMembersDownloadDialog = new IncompleteMembersDownloadDialog();
+		return incompleteMembersDownloadDialog.getUserSelection();
+
 	}
 
@@ -229,11 +270,11 @@
 		List<Command> commands = new ArrayList<>();
 
-		if (testError.getCode() == ERROR_CODE_ROAD_TYPE
-				|| testError.getCode() == ERROR_CODE_CONSTRUCTION) {
+		if (testError.getCode() == ERROR_CODE_ROAD_TYPE || testError.getCode() == ERROR_CODE_CONSTRUCTION) {
 			commands.add(WayChecker.fixErrorByRemovingWay(testError));
 		}
-		
+
 		if (testError.getCode() == ERROR_CODE_DIRECTION) {
 			commands.add(WayChecker.fixErrorByZooming(testError));
+
 		}
 
@@ -279,5 +320,4 @@
 	}
 
-	
 	@SuppressWarnings("unused")
 	private void performDummyTest(Relation r) {
Index: applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java
===================================================================
--- applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java	(revision 32540)
+++ applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java	(revision 32554)
@@ -7,4 +7,6 @@
 import java.util.List;
 
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
@@ -19,6 +21,9 @@
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor;
+import org.openstreetmap.josm.gui.dialogs.relation.RelationDialogManager;
 import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionType;
 import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionTypeCalculator;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
 
@@ -275,13 +280,61 @@
 		}
 		
-//		Collection<? extends OsmPrimitive> primitives = testError.getPrimitives();
-//		Relation originalRelation = (Relation) primitives.iterator().next();
+		 long startTime = System.currentTimeMillis();
+		
+		Collection<? extends OsmPrimitive> primitives = testError.getPrimitives();
+		Relation originalRelation = (Relation) primitives.iterator().next();
 		Collection<?> highlighted = testError.getHighlighted();
 		Way wayToHighlight = (Way) highlighted.iterator().next();
 		ArrayList<OsmPrimitive> primitivesToHighlight = new ArrayList<>(1);
 		primitivesToHighlight.add(wayToHighlight);
-
+		
+		long endTime = System.currentTimeMillis();
+		System.out.println("obtaining primitives: " + (endTime - startTime));
+		startTime = endTime;
+		
 		SelectCommand command = new SelectCommand(primitivesToHighlight);
 		
+		endTime = System.currentTimeMillis();
+		System.out.println("constructing command: " + (endTime - startTime));
+		startTime = endTime;
+		
+		AutoScaleAction.zoomTo(primitivesToHighlight);
+		
+		endTime = System.currentTimeMillis();
+		System.out.println("AutoScaleAction done: " + (endTime - startTime));
+		startTime = endTime;
+		
+		List<OsmDataLayer> listOfLayers = Main.getLayerManager().getLayersOfType(OsmDataLayer.class);
+		for (OsmDataLayer osmDataLayer: listOfLayers) {
+			if (osmDataLayer.data == originalRelation.getDataSet()) {
+				endTime = System.currentTimeMillis();
+				System.out.println("getting to the necessary layer: " + (endTime - startTime));
+				startTime = endTime;
+				
+				GenericRelationEditor editor = new GenericRelationEditor(osmDataLayer, originalRelation, originalRelation.getMembersFor(primitivesToHighlight));
+				endTime = System.currentTimeMillis();
+				System.out.println("creating relation editor: " + (endTime - startTime));
+				startTime = endTime;
+				
+				RelationDialogManager.getRelationDialogManager().register(osmDataLayer, originalRelation, editor);
+				
+				endTime = System.currentTimeMillis();
+				System.out.println("registering relation editor: " + (endTime - startTime));
+				startTime = endTime;
+				
+				editor.setVisible(true);
+				
+				endTime = System.currentTimeMillis();
+				System.out.println("setting editor visible: " + (endTime - startTime));
+				startTime = endTime;
+				
+				break;
+			}
+		}
+		
+		endTime = System.currentTimeMillis();
+		System.out.println("whatever else: " + (endTime - startTime));
+		startTime = endTime;
+						
 		return command;
 		
