Index: /trunk/src/org/openstreetmap/josm/gui/MainFrame.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 17625)
+++ /trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 17626)
@@ -166,6 +166,5 @@
     public void refreshTitle() {
         OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
-        boolean dirty = editLayer != null && (editLayer.requiresSaveToFile()
-                || (editLayer.requiresUploadToServer() && !editLayer.isUploadDiscouraged()));
+        boolean dirty = editLayer != null && editLayer.isDirty();
         String userInfo = UserIdentityManager.getInstance().getUserName();
         if (userInfo != null && Config.getPref().getBoolean("draw.show-user", false))
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 17625)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 17626)
@@ -708,5 +708,5 @@
             Layer layer = (Layer) value;
             JLabel label = (JLabel) super.getTableCellRendererComponent(table,
-                    layer.getName(), isSelected, hasFocus, row, column);
+                    layer.getLabel(), isSelected, hasFocus, row, column);
             if (isActiveLayer(layer)) {
                 label.setFont(label.getFont().deriveFont(Font.BOLD));
Index: /trunk/src/org/openstreetmap/josm/gui/layer/Layer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/Layer.java	(revision 17625)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/Layer.java	(revision 17626)
@@ -312,4 +312,13 @@
 
     /**
+     * Replies a label for this layer useful for UI elements. Defaults to the layer name
+     * @return a label for this layer
+     * @since 17626
+     */
+    public String getLabel() {
+        return getName();
+    }
+
+    /**
      * Replies the name of the layer
      *
Index: /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 17625)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 17626)
@@ -1060,4 +1060,26 @@
     }
 
+    /**
+     * Determines if this layer is "dirty", i.e., requires save or upload
+     * @return if this layer is "dirty"
+     * @since 17626
+     */
+    public boolean isDirty() {
+        return requiresSaveToFile() || (requiresUploadToServer() && !isUploadDiscouraged());
+    }
+
+    @Override
+    public String getLabel() {
+        String label = super.getLabel();
+        if (this.isDirty()) {
+            label += " *";
+        }
+        if (this.getDataSet().isEmpty()) {
+            // U+2205 EMPTY SET
+            label += " \u2205";
+        }
+        return label;
+    }
+
     @Override
     public void onPostLoadFromFile() {
