diff --git a/base/applications/rapps/appview.cpp b/base/applications/rapps/appview.cpp
index 58584fa3b7..c3fb1ac17a 100644
--- a/base/applications/rapps/appview.cpp
+++ b/base/applications/rapps/appview.cpp
@@ -1382,7 +1382,21 @@ BOOL CAppsListView::AddInstalledApplication(CInstalledApplicationInfo *InstAppIn
         return FALSE;
     }
 
-    HICON hIcon = (HICON)LoadIconW(hInst, MAKEINTRESOURCEW(IDI_MAIN));
+    /* Load icon from registry */
+    HICON hIcon = NULL;
+    ATL::CStringW szIconPath;
+    if (InstAppInfo->RetrieveIcon(szIconPath))
+    {
+        hIcon = (HICON)ExtractIconW(hInst,
+            szIconPath.GetString(),
+            0);
+    }
+
+    if (!hIcon || GetLastError() != ERROR_SUCCESS)
+    {
+        /* Load default icon */
+        hIcon = (HICON)LoadIconW(hInst, MAKEINTRESOURCE(IDI_MAIN));
+    }
 
     int IconIndex = ImageList_AddIcon(m_hImageListView, hIcon);
     DestroyIcon(hIcon);
diff --git a/base/applications/rapps/include/appview.h b/base/applications/rapps/include/appview.h
index 7e8b9da6bc..668131245c 100644
--- a/base/applications/rapps/include/appview.h
+++ b/base/applications/rapps/include/appview.h
@@ -20,7 +20,7 @@
 
 using namespace Gdiplus;
 
-#define LISTVIEW_ICON_SIZE 24
+#define LISTVIEW_ICON_SIZE 32
 
 // default broken-image icon size
 #define BROKENIMG_ICON_SIZE 96
diff --git a/base/applications/rapps/include/installed.h b/base/applications/rapps/include/installed.h
index a719ed9057..6e95005648 100644
--- a/base/applications/rapps/include/installed.h
+++ b/base/applications/rapps/include/installed.h
@@ -16,9 +16,11 @@ public:
     CInstalledApplicationInfo(BOOL bIsUserKey, REGSAM RegWowKey, HKEY hKey);
     BOOL GetApplicationRegString(LPCWSTR lpKeyName, ATL::CStringW& String);
     BOOL GetApplicationRegDword(LPCWSTR lpKeyName, DWORD *lpValue);
+    BOOL RetrieveIcon(ATL::CStringW& IconLocation);
     BOOL UninstallApplication(BOOL bModify);
     LSTATUS RemoveFromRegistry();
 
+    ATL::CStringW szDisplayIcon;
     ATL::CStringW szDisplayName;
     ATL::CStringW szDisplayVersion;
     ATL::CStringW szPublisher;
diff --git a/base/applications/rapps/installed.cpp b/base/applications/rapps/installed.cpp
index 955ba01213..4179334a60 100644
--- a/base/applications/rapps/installed.cpp
+++ b/base/applications/rapps/installed.cpp
@@ -126,6 +126,16 @@ BOOL CInstalledApplicationInfo::GetApplicationRegDword(LPCWSTR lpKeyName, DWORD
     return TRUE;
 }
 
+BOOL CInstalledApplicationInfo::RetrieveIcon(ATL::CStringW& IconLocation)
+{
+    if (szDisplayIcon.IsEmpty())
+    {
+        return FALSE;
+    }
+    IconLocation = szDisplayIcon;
+    return TRUE;
+}
+
 BOOL CInstalledApplicationInfo::UninstallApplication(BOOL bModify)
 {
     return StartProcess(bModify ? szModifyPath : szUninstallString, TRUE);
@@ -206,6 +216,7 @@ BOOL CInstalledApps::Enum(INT EnumType, APPENUMPROC lpEnumProc, PVOID param)
                     // those items without display name are ignored
                     if (Info->GetApplicationRegString(L"DisplayName", Info->szDisplayName))
                     {
+                        Info->GetApplicationRegString(L"DisplayIcon", Info->szDisplayIcon);
                         Info->GetApplicationRegString(L"DisplayVersion", Info->szDisplayVersion);
                         Info->GetApplicationRegString(L"Publisher", Info->szPublisher);
                         Info->GetApplicationRegString(L"RegOwner", Info->szRegOwner);
