Index: trunk/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java	(revision 13108)
+++ trunk/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java	(revision 13109)
@@ -2,5 +2,8 @@
 package org.openstreetmap.josm.gui.io;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.gui.util.ChangeNotifier;
@@ -35,3 +38,12 @@
         return comment == null ? "" : comment;
     }
+
+    /**
+     * Extracts the list of hashtags from the comment text.
+     * @return the list of hashtags from the comment text. Can be empty, but not null.
+     * @since 13109
+     */
+    public List<String> findHashTags() {
+        return Arrays.stream(comment.split("\\s")).filter(s -> s.length() >= 2 && s.charAt(0) == '#').collect(Collectors.toList());
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java	(revision 13108)
+++ trunk/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java	(revision 13109)
@@ -48,5 +48,5 @@
         this.changesetSourceModel = changesetSourceModel;
         this.changesetReviewModel = changesetReviewModel;
-        changesetCommentModel.addChangeListener(new ChangesetCommentChangeListener("comment"));
+        changesetCommentModel.addChangeListener(new ChangesetCommentChangeListener("comment", "hashtags"));
         changesetSourceModel.addChangeListener(new ChangesetCommentChangeListener("source"));
         changesetReviewModel.addChangeListener(new ChangesetReviewChangeListener());
@@ -135,7 +135,13 @@
 
         private final String key;
+        private final String hashtagsKey;
 
         ChangesetCommentChangeListener(String key) {
+            this(key, null);
+        }
+
+        ChangesetCommentChangeListener(String key, String hashtagsKey) {
             this.key = key;
+            this.hashtagsKey = hashtagsKey;
         }
 
@@ -143,8 +149,16 @@
         public void stateChanged(ChangeEvent e) {
             if (e.getSource() instanceof ChangesetCommentModel) {
-                String newValue = ((ChangesetCommentModel) e.getSource()).getComment();
+                ChangesetCommentModel model = ((ChangesetCommentModel) e.getSource());
+                String newValue = model.getComment();
                 String oldValue = Optional.ofNullable(getTagEditorValue(key)).orElse("");
                 if (!oldValue.equals(newValue)) {
                     setProperty(key, newValue);
+                    if (hashtagsKey != null) {
+                        String newHashTags = String.join(";", model.findHashTags());
+                        String oldHashTags = Optional.ofNullable(getTagEditorValue(hashtagsKey)).orElse("");
+                        if (!oldHashTags.equals(newHashTags)) {
+                            setProperty(hashtagsKey, newHashTags);
+                        }
+                    }
                 }
             }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 13108)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 13109)
@@ -6,4 +6,5 @@
 import java.awt.geom.Area;
 import java.awt.geom.Rectangle2D;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -77,5 +78,6 @@
     @Override
     public String[] getOptionalParams() {
-        return new String[] {"new_layer", "layer_name", "addtags", "select", "zoom_mode", "changeset_comment", "changeset_source", "search"};
+        return new String[] {"new_layer", "layer_name", "addtags", "select", "zoom_mode",
+                "changeset_comment", "changeset_source", "changeset_hashtags", "search"};
     }
 
@@ -213,12 +215,12 @@
 
         // add changeset tags after download if necessary
-        if (args.containsKey("changeset_comment") || args.containsKey("changeset_source")) {
+        if (args.containsKey("changeset_comment") || args.containsKey("changeset_source") || args.containsKey("changeset_hashtags")) {
             MainApplication.worker.submit(() -> {
-                if (MainApplication.getLayerManager().getEditDataSet() != null) {
-                    if (args.containsKey("changeset_comment")) {
-                        MainApplication.getLayerManager().getEditDataSet().addChangeSetTag("comment", args.get("changeset_comment"));
-                    }
-                    if (args.containsKey("changeset_source")) {
-                        MainApplication.getLayerManager().getEditDataSet().addChangeSetTag("source", args.get("changeset_source"));
+                DataSet ds = MainApplication.getLayerManager().getEditDataSet();
+                if (ds != null) {
+                    for (String tag : Arrays.asList("changeset_comment", "changeset_source", "changeset_hashtags")) {
+                        if (args.containsKey(tag)) {
+                            ds.addChangeSetTag(tag.substring("changeset_".length()), args.get(tag));
+                        }
                     }
                 }
