Index: src/org/openstreetmap/josm/gui/download/BookmarkList.java
===================================================================
--- src/org/openstreetmap/josm/gui/download/BookmarkList.java	(revision 12487)
+++ src/org/openstreetmap/josm/gui/download/BookmarkList.java	(working copy)
@@ -14,6 +14,7 @@
 import java.util.Objects;
 
 import javax.swing.DefaultListModel;
+import javax.swing.ImageIcon;
 import javax.swing.JLabel;
 import javax.swing.JList;
 import javax.swing.ListCellRenderer;
@@ -21,7 +22,15 @@
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.UserInfo;
+import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.data.projection.Projections;
+import org.openstreetmap.josm.gui.JosmUserIdentityManager;
+import org.openstreetmap.josm.gui.MapViewState;
+import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 
 /**
  * List class that read and save its content from the bookmark file.
@@ -35,6 +44,7 @@
     public static class Bookmark implements Comparable<Bookmark> {
         private String name;
         private Bounds area;
+        private ImageIcon icon;
 
         /**
          * Constructs a new {@code Bookmark} with the given contents.
@@ -47,6 +57,7 @@
             List<String> array = new ArrayList<>(list);
             if (array.size() < 5)
                 throw new IllegalArgumentException(tr("Wrong number of arguments for bookmark"));
+            icon = ImageProvider.get("dialogs", "bookmark");
             name = array.get(0);
             area = new Bounds(Double.parseDouble(array.get(1)), Double.parseDouble(array.get(2)),
                               Double.parseDouble(array.get(3)), Double.parseDouble(array.get(4)));
@@ -56,8 +67,7 @@
          * Constructs a new empty {@code Bookmark}.
          */
         public Bookmark() {
-            area = null;
-            name = null;
+            this(null, null);
         }
 
         /**
@@ -65,10 +75,23 @@
          * @param area The bookmark area
          */
         public Bookmark(Bounds area) {
+            this(null, area);
+        }
+
+        /**
+         * Constructs a new {@code Bookmark} for the given name and area.
+         * @param name The bookmark name
+         * @param area The bookmark area
+         * @since xxx
+         */
+        protected Bookmark(String name, Bounds area) {
+            this.icon = ImageProvider.get("dialogs", "bookmark");
+            this.name = name;
             this.area = area;
         }
 
-        @Override public String toString() {
+        @Override
+        public String toString() {
             return name;
         }
 
@@ -88,7 +111,7 @@
             if (obj == null || getClass() != obj.getClass()) return false;
             Bookmark bookmark = (Bookmark) obj;
             return Objects.equals(name, bookmark.name) &&
-                    Objects.equals(area, bookmark.area);
+                   Objects.equals(area, bookmark.area);
         }
 
         /**
@@ -122,9 +145,57 @@
         public void setArea(Bounds area) {
             this.area = area;
         }
+
+        /**
+         * Returns the bookmark icon.
+         * @return the bookmark icon
+         * @since xxx
+         */
+        public ImageIcon getIcon() {
+            return icon;
+        }
+
+        /**
+         * Sets the bookmark icon.
+         * @param icon the bookmark icon
+         * @since xxx
+         */
+        public void setIcon(ImageIcon icon) {
+            this.icon = icon;
+        }
     }
 
     /**
+     * A specific optional bookmark for the "home location" configured on osm.org website.
+     * @since xxx
+     */
+    public static class HomeLocationBookmark extends Bookmark {
+        /**
+         * Constructs a new {@code HomeLocationBookmark}.
+         */
+        public HomeLocationBookmark() {
+            setName(tr("Home location"));
+            setIcon(ImageProvider.get("help", "home", ImageSizes.SMALLICON));
+            final UserInfo info = JosmUserIdentityManager.getInstance().getUserInfo();
+            if (info == null) {
+                throw new IllegalStateException("User not identified");
+            }
+            final LatLon home = info.getHome();
+            if (home == null) {
+                throw new IllegalStateException("User home location not set");
+            }
+            final int zoom = info.getHomeZoom();
+            Projection mercator = Projections.getProjectionByCode("EPSG:3857");
+            setArea(MapViewState.createDefaultState(430, 400) // Size of map on osm.org user profile settings
+                    .usingProjection(mercator)
+                    .usingScale(Selector.GeneralSelector.level2scale(zoom) / 50000)
+                    .usingCenter(mercator.latlon2eastNorth(home))
+                    .getViewArea()
+                    .getLatLonBoundsBox());
+        }
+    }
+
+    /**
      * Creates a bookmark list as well as the Buttons add and remove.
      */
     public BookmarkList() {
@@ -135,11 +206,19 @@
     }
 
     /**
-     * Loads the bookmarks from file.
+     * Loads the manual bookmarks from preferences file, and the home location bookmark from OSM API.
      */
     public final void load() {
         DefaultListModel<Bookmark> model = (DefaultListModel<Bookmark>) getModel();
         model.removeAllElements();
+        if (JosmUserIdentityManager.getInstance().isFullyIdentified()) {
+            try {
+                model.addElement(new HomeLocationBookmark());
+            } catch (IllegalStateException e) {
+                Main.info(e.getMessage());
+                Main.trace(e);
+            }
+        }
         Collection<Collection<String>> args = Main.pref.getArray("bookmarks", null);
         if (args != null) {
             List<Bookmark> bookmarks = new LinkedList<>();
@@ -158,11 +237,14 @@
     }
 
     /**
-     * Saves all bookmarks to the preferences file
+     * Saves all manual bookmarks to the preferences file.
      */
     public final void save() {
         List<Collection<String>> coll = new LinkedList<>();
         for (Object o : ((DefaultListModel<Bookmark>) getModel()).toArray()) {
+            if (o instanceof HomeLocationBookmark) {
+                continue;
+            }
             String[] array = new String[5];
             Bookmark b = (Bookmark) o;
             array[0] = b.getName();
@@ -183,7 +265,6 @@
          */
         BookmarkCellRenderer() {
             setOpaque(true);
-            setIcon(ImageProvider.get("dialogs", "bookmark"));
         }
 
         protected void renderColor(boolean selected) {
@@ -211,6 +292,7 @@
         public Component getListCellRendererComponent(JList<? extends Bookmark> list, Bookmark value, int index, boolean isSelected,
                 boolean cellHasFocus) {
             renderColor(isSelected);
+            setIcon(value.getIcon());
             setText(value.getName());
             setToolTipText(buildToolTipText(value));
             return this;
