Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 975)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 976)
@@ -104,4 +104,6 @@
 
 		if(!isZoomOk(wayStyle))
+			return;
+		if(w.nodes.size() < 2)
 			return;
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 975)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 976)
@@ -206,12 +206,12 @@
 	 */
 	public void visit(Way w) {
-		if (w.incomplete) return;
-
-				// show direction arrows, if draw.segment.relevant_directions_only is not set, the way is tagged with a direction key
-				// (even if the tag is negated as in oneway=false) or the way is selected
-
-				boolean showThisDirectionArrow = w.selected
-												 || (showDirectionArrow
-													 && (!showRelevantDirectionsOnly || w.hasDirectionKeys));
+		if (w.incomplete || w.nodes.size() < 2)
+			return;
+
+		// show direction arrows, if draw.segment.relevant_directions_only is not set, the way is tagged with a direction key
+		// (even if the tag is negated as in oneway=false) or the way is selected
+
+		boolean showThisDirectionArrow = w.selected
+		|| (showDirectionArrow && (!showRelevantDirectionsOnly || w.hasDirectionKeys));
 		Color wayColor;
 
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 975)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 976)
@@ -35,4 +35,5 @@
 	 */
 	public MainApplication(JFrame mainFrame) {
+		super();
 		mainFrame.setContentPane(contentPane);
 		mainFrame.setJMenuBar(menu);
@@ -82,4 +83,13 @@
 		}
 
+		// Only show the splash screen if we don't print the help and exit
+		SplashScreen splash;
+		if (!argList.contains("--help") && !argList.contains("-?") && !argList.contains("-h")) {
+			splash = new SplashScreen();
+		} else {
+			splash = null;
+		}
+
+		splash.setStatus(tr("Reading preferences"));
 		// get the preferences.
 		final File prefDir = new File(Main.pref.getPreferencesDir());
@@ -123,11 +133,13 @@
 			language = (String)(args.get("language").toArray()[0]);
 
+		splash.setStatus(tr("Activating updated plugins"));
 		if (!PluginDownloader.moveUpdatedPlugins()) {
 			JOptionPane.showMessageDialog(null,
-			        tr("Activating the updated plugins failed."),
+			        tr("Activating the updated plugins failed. Check if JOSM has the permission to overwrite the existing ones."),
 			        tr("Plugins"), JOptionPane.ERROR_MESSAGE);
 		}
 		
 		// load the early plugins
+		splash.setStatus(tr("Loading early plugins"));
 		Main.loadPlugins(true, language);
 
@@ -159,12 +171,16 @@
 		}
 
+		splash.setStatus(tr("Setting defaults"));
 		preConstructorInit(args);
+		splash.setStatus(tr("Creating main GUI"));
 		JFrame mainFrame = new JFrame(tr("Java OpenStreetMap - Editor"));
 		Main.parent = mainFrame;
 		final Main main = new MainApplication(mainFrame);
+		splash.setStatus(tr("Loading plugins"));
 		Main.loadPlugins(false, null);
 		toolbar.refreshToolbarControl();
 
 		mainFrame.setVisible(true);
+		splash.closeSplash();
 
 		if (!args.containsKey("no-fullscreen") && !args.containsKey("geometry") && Toolkit.getDefaultToolkit().isFrameStateSupported(JFrame.MAXIMIZED_BOTH))
Index: trunk/src/org/openstreetmap/josm/gui/SplashScreen.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SplashScreen.java	(revision 976)
+++ trunk/src/org/openstreetmap/josm/gui/SplashScreen.java	(revision 976)
@@ -0,0 +1,144 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.Toolkit;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.JWindow;
+import javax.swing.SwingUtilities;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.EtchedBorder;
+
+import org.openstreetmap.josm.actions.AboutAction;
+
+/**
+ * Show a splash screen so the user knows what is happening during startup.
+ * 
+ * @author cbrill 
+ */
+public class SplashScreen extends JWindow {
+
+	private JLabel status;
+
+	private Runnable closerRunner;
+
+	public SplashScreen() {
+		super();
+
+		// Add a nice border to the main splash screen
+		JPanel contentPane = (JPanel)this.getContentPane();
+		Border margin = new EtchedBorder(1, Color.white, Color.gray);
+		contentPane.setBorder(margin);
+
+		// Add a margin from the border to the content
+		JPanel innerContentPane = new JPanel();
+		innerContentPane.setBorder(new EmptyBorder(10, 10, 2, 10));
+		contentPane.add(innerContentPane);
+		innerContentPane.setLayout(new GridBagLayout());
+
+		// Add the logo
+		JLabel logo = new JLabel(new ImageIcon("images/logo.png"));
+		GridBagConstraints gbc = new GridBagConstraints();
+		gbc.gridheight = 2;
+		innerContentPane.add(logo, gbc);
+
+		// Add the name of this application
+		JLabel caption = new JLabel(tr("JOSM - Java OpenStreetMap Editor"));
+		caption.setFont(new Font("Helvetica", Font.BOLD, 20));
+		gbc.gridheight = 1;
+		gbc.gridx = 1;
+		gbc.insets = new Insets(30, 0, 0, 0);
+		innerContentPane.add(caption, gbc);
+
+		// Add the version number
+		JLabel version = new JLabel(tr("Version {0}", AboutAction.version));
+		gbc.gridy = 1;
+		gbc.insets = new Insets(0, 0, 0, 0);
+		innerContentPane.add(version, gbc);
+
+		// Add a separator to the status text
+		JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);
+		gbc.gridx = 0;
+		gbc.gridy = 2;
+		gbc.gridwidth = 2;
+		gbc.fill = GridBagConstraints.HORIZONTAL;
+		gbc.insets = new Insets(15, 0, 5, 0);
+		innerContentPane.add(separator, gbc);
+
+		// Add a status message
+		status = new JLabel();
+		gbc.gridy = 3;
+		gbc.insets = new Insets(0, 0, 0, 0);
+		innerContentPane.add(status, gbc);
+		setStatus(tr("Initializing"));
+
+		pack();
+
+		// Center the splash screen
+		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+		Dimension labelSize = contentPane.getPreferredSize();
+		setLocation(screenSize.width / 2 - (labelSize.width / 2),
+		        screenSize.height / 2 - (labelSize.height / 2));
+
+		// Method to close the splash screen when being clicked or when closeSplash is called
+		closerRunner = new Runnable() {
+			public void run() {
+				setVisible(false);
+				dispose();
+			}
+		};
+
+		// Add ability to hide splash screen by clicking it
+		addMouseListener(new MouseAdapter() {
+			public void mousePressed(MouseEvent event) {
+				try {
+					SwingUtilities.invokeAndWait(closerRunner);
+				} catch (Exception e) {
+					e.printStackTrace();
+					// can catch InvocationTargetException
+					// can catch InterruptedException
+				}
+			}
+		});
+		setVisible(true);
+	}
+
+	/**
+	 * This method sets the status message. It should be called prior to
+	 * actually doing the action.
+	 * 
+	 * @param message
+	 *            the message to be displayed
+	 */
+	public void setStatus(String message) {
+		status.setText(message + " ...");
+	}
+
+	/**
+	 * Closes the splashscreen. Call once you are done starting.
+	 */
+	public void closeSplash() {
+		try {
+			SwingUtilities.invokeAndWait(closerRunner);
+		} catch (Exception e) {
+			e.printStackTrace();
+			// can catch InvocationTargetException
+			// can catch InterruptedException
+		}
+	}
+
+}
Index: trunk/styles/standard/elemstyles.xml
===================================================================
--- trunk/styles/standard/elemstyles.xml	(revision 975)
+++ trunk/styles/standard/elemstyles.xml	(revision 976)
@@ -603,5 +603,5 @@
 	<rule>
 		<condition k="highway" v="turning_circle"/>
-		<area width="1" colour="roundabout#c0c0c0"/>
+		<area width="1" colour="turningcircle#c0c0c0"/>
 		<icon annotate="true" src="vehicle/turning_circle.png"/>
 		<scale_min>1</scale_min>
