Index: trunk/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java	(revision 13106)
+++ 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 13106)
+++ 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);
+                        }
+                    }
                 }
             }
