diff --git a/gui/page/spkpagehome.cpp b/gui/page/spkpagehome.cpp
index 3c49d2a..006b569 100644
--- a/gui/page/spkpagehome.cpp
+++ b/gui/page/spkpagehome.cpp
@@ -27,6 +27,12 @@ void SpkUi::SpkPageHome::SetupUi()
 
   ui->lblVersion->setText(ui->lblVersion->text().arg(GitVer::DescribeTags()));
 
+  ui->lblNewAnnouncement->setVisible(false);
+
+  ui->widReloadCategory->setVisible(false);
+  ui->widReloadCategory->setAttribute(Qt::WA_StyledBackground);
+  ui->lblCategoryErrIcon->setPixmap(QIcon::fromTheme("dialog-error").pixmap(QSize(32, 32)));
+
   connect(ui->lblAuthor, &QLabel::linkActivated,
           this, &SpkPageHome::LinkActivated);
   connect(ui->btnFeedback, &QPushButton::clicked,
@@ -35,5 +41,4 @@ void SpkUi::SpkPageHome::SetupUi()
           [&](){ LinkActivated("https://spark.deepinos.org.cn/"); });
   connect(ui->btnAbout, &QPushButton::clicked,
           [&](){ SpkAbout::Show(); });
-  ui->lblNewAnnouncement->setVisible(false);
 }
diff --git a/gui/page/ui/homepage.ui b/gui/page/ui/homepage.ui
index 162207d..f65062a 100644
--- a/gui/page/ui/homepage.ui
+++ b/gui/page/ui/homepage.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>648</width>
-    <height>468</height>
+    <height>554</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -220,6 +220,71 @@
      </property>
     </spacer>
    </item>
+   <item>
+    <widget class="QWidget" name="widReloadCategory" native="true">
+     <layout class="QHBoxLayout" name="horizontalLayout_3">
+      <item>
+       <widget class="QLabel" name="lblCategoryErrIcon">
+        <property name="text">
+         <string>{error-icon}</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_4">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QLabel" name="lblCategoryErr">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Category loading failed. Click the button to retry.</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="btnReloadCategory">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Reload</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
diff --git a/gui/spkmainwindow.cpp b/gui/spkmainwindow.cpp
index 1d87930..ce4b72f 100644
--- a/gui/spkmainwindow.cpp
+++ b/gui/spkmainwindow.cpp
@@ -99,9 +99,10 @@ void SpkMainWindow::CategoryDataReceived()
   {
     sErr(tr("Failed to load categories! Type=%1 Code=%2").arg(retval.type()).arg(verify));
     sNotify(tr("Cannot load categories! Type: %1 Code: %2").arg(retval.type()).arg(verify));
-    // TODO: Switch to an error page
+    ui->PageHome->ui->widReloadCategory->setVisible(true);
     return;
   }
+  ui->PageHome->ui->widReloadCategory->setVisible(false);
   PopulateCategories(retval.toArray());
 }
 
@@ -364,6 +365,8 @@ void SpkMainWindow::Initialize()
   }
   connect(ui->PageAppDetails, &SpkUi::SpkPageAppDetails::RequestDownload,
           ui->PageDownloads, &SpkUi::SpkPageDownloads::AddDownloadTask);
+  connect(ui->PageHome->ui->btnReloadCategory, &QPushButton::clicked,
+          this, &SpkMainWindow::RefreshCategoryData);
 
   // Register themed button icons
 //  mThemedUiIconReferences.append({ ui->BtnSettings, "settings" });
diff --git a/resource/stylesheets/default.css b/resource/stylesheets/default.css
index 3135db3..6995dea 100644
--- a/resource/stylesheets/default.css
+++ b/resource/stylesheets/default.css
@@ -237,6 +237,12 @@ SpkAppItem::hover
 {
 }
 
+#widReloadCategory
+{
+    background-color: #FFA329;
+    border-radius: 6px;
+}
+
 #styAppItmTitle
 {
     font-weight: 500;