Index: trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 18466)
+++ trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 18467)
@@ -7,4 +7,5 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -243,4 +244,13 @@
         dialog.setUploadedPrimitives(apiData);
         dialog.initLifeCycle(layer.getDataSet());
+        Map<String, String> changesetTags = dialog.getChangeset().getKeys();
+        Map<String, String> originalChangesetTags = new HashMap<>(changesetTags);
+        for (UploadHook hook : UPLOAD_HOOKS) {
+            hook.modifyChangesetTags(changesetTags);
+        }
+        dialog.getModel().putAll(changesetTags);
+        if (!originalChangesetTags.equals(changesetTags)) {
+            dialog.setChangesetTagsModifiedProgramatically();
+        }
         dialog.setVisible(true);
         dialog.rememberUserInput();
@@ -259,8 +269,5 @@
         // Any hooks want to change the changeset tags?
         Changeset cs = dialog.getChangeset();
-        Map<String, String> changesetTags = cs.getKeys();
-        for (UploadHook hook : UPLOAD_HOOKS) {
-            hook.modifyChangesetTags(changesetTags);
-        }
+        changesetTags = cs.getKeys();
         for (UploadHook hook : LATE_UPLOAD_HOOKS) {
             hook.modifyChangesetTags(changesetTags);
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 18466)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 18467)
@@ -3,8 +3,10 @@
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.BorderLayout;
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Dimension;
@@ -34,4 +36,5 @@
 import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeListener;
 
 import org.openstreetmap.josm.data.APIDataSet;
@@ -39,4 +42,5 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -65,4 +69,7 @@
  */
 public class UploadDialog extends AbstractUploadDialog implements PreferenceChangedListener, PropertyChangeListener {
+    /** A warning color to indicate something is non-default in the changeset tags */
+    private static final Color WARNING_BACKGROUND = new NamedColorProperty(
+            marktr("Changesets: Non-default advanced settings"), new Color(0xF89042)).get();
     /** the unique instance of the upload dialog */
     private static UploadDialog uploadDialog;
@@ -90,4 +97,5 @@
 
     private transient DataSet dataSet;
+    private ChangeListener changesetTagListener;
 
     /**
@@ -148,4 +156,5 @@
         pnlSettings.add(pnlTagEditorBorder, GBC.eol().fill(GridBagConstraints.BOTH));
 
+        // if another tab is added, please don't forget to update setChangesetTagsModifiedProgramatically
         tpConfigPanels.add(pnlSettings);
         tpConfigPanels.setTitleAt(1, tr("Settings"));
@@ -357,4 +366,27 @@
         }
         super.setVisible(visible);
+    }
+
+    /**
+     * This is called by {@link UploadAction} if {@link org.openstreetmap.josm.actions.upload.UploadHook}s change
+     * the changeset tags.
+     */
+    public void setChangesetTagsModifiedProgramatically() {
+        final Color originalColor = this.tpConfigPanels.getBackgroundAt(1);
+        this.tpConfigPanels.setBackgroundAt(1, WARNING_BACKGROUND);
+        this.tpConfigPanels.setIconAt(1, ImageProvider.get("warning-small"));
+        if (this.changesetTagListener != null) {
+            this.tpConfigPanels.removeChangeListener(this.changesetTagListener);
+        }
+        this.changesetTagListener = event -> {
+            if (this.tpConfigPanels.getSelectedIndex() == 1) {
+                tpConfigPanels.setBackgroundAt(1, originalColor);
+                tpConfigPanels.setIconAt(1, ImageProvider.get("apply"));
+                this.tpConfigPanels.removeChangeListener(this.changesetTagListener);
+                changesetTagListener = null;
+            }
+        };
+
+        this.tpConfigPanels.addChangeListener(this.changesetTagListener);
     }
 
@@ -611,4 +643,9 @@
         setUploadedPrimitives(null);
         dataSet = null;
+        if (this.changesetTagListener != null) {
+            this.changesetTagListener.stateChanged(null);
+            this.tpConfigPanels.removeChangeListener(this.changesetTagListener);
+            this.changesetTagListener = null;
+        }
     }
 }
