diff --git a/ChangeLog b/ChangeLog
index 13e6866..4eebeac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,5 @@
-2019-03-03 master
+2019-06-02 master
+- Expand leading ~ in icon paths
 - Fix spacing around icons in executor without text in vertical panels (issue #716)
 - Fix Bug: Clock Only Updates Every Minute With Format %s (issue #724)
 - Fix markup drawing when font shadow enabled (issue #709)
diff --git a/src/config.c b/src/config.c
index 944d93a..b23857c 100644
--- a/src/config.c
+++ b/src/config.c
@@ -794,7 +794,7 @@ void add_entry(char *key, char *value)
     } else if (strcmp(key, "button_icon") == 0) {
         if (strlen(value)) {
             Button *button = get_or_create_last_button();
-            button->backend->icon_name = strdup(value);
+            button->backend->icon_name = expand_tilde(value);
         }
     } else if (strcmp(key, "button_text") == 0) {
         if (strlen(value)) {
diff --git a/src/execplugin/execplugin.c b/src/execplugin/execplugin.c
index 2181e6e..71394b1 100644
--- a/src/execplugin/execplugin.c
+++ b/src/execplugin/execplugin.c
@@ -891,7 +891,7 @@ gboolean read_execp(void *obj)
                 } else {
                     execp->backend->text = strdup("");
                 }
-                execp->backend->icon_path = strdup(execp->backend->buf_stdout);
+                execp->backend->icon_path = expand_tilde(execp->backend->buf_stdout);
             }
             size_t len = strlen(execp->backend->text);
             if (len > 0 && execp->backend->text[len - 1] == '\n')
diff --git a/src/launcher/icon-theme-common.c b/src/launcher/icon-theme-common.c
index b8a03f7..1244859 100644
--- a/src/launcher/icon-theme-common.c
+++ b/src/launcher/icon-theme-common.c
@@ -566,6 +566,10 @@ char *icon_path_from_full_path(const char *s)
 {
     if (is_full_path(s) && file_exists(s))
         return strdup(s);
+    char *expanded = expand_tilde(s);
+    if (is_full_path(expanded) && file_exists(expanded))
+        return expanded;
+    free(expanded);
     return NULL;
 }