diff --git a/gajim/data/gui/httpupload_progress_dialog.ui b/gajim/data/gui/httpupload_progress_dialog.ui
index 2ee9d43b85ce5534cab4e196968fab0f9fd1dfa5..ce1c789694319768d1611aecd11414c8fce88169 100644
--- a/gajim/data/gui/httpupload_progress_dialog.ui
+++ b/gajim/data/gui/httpupload_progress_dialog.ui
@@ -1,29 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.1 -->
+<!-- Generated with glade 3.22.1 -->
 <interface>
-  <requires lib="gtk+" version="3.14"/>
+  <requires lib="gtk+" version="3.20"/>
   <object class="GtkBox" id="box">
+    <property name="width_request">300</property>
     <property name="visible">True</property>
     <property name="can_focus">False</property>
+    <property name="border_width">18</property>
     <property name="orientation">vertical</property>
+    <property name="spacing">6</property>
     <child>
-      <object class="GtkAlignment" id="alignment1">
+      <object class="GtkImage">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="top_padding">8</property>
-        <property name="bottom_padding">4</property>
-        <property name="left_padding">8</property>
-        <property name="right_padding">8</property>
-        <child>
-          <object class="GtkLabel" id="label">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <attributes>
-              <attribute name="weight" value="bold"/>
-              <attribute name="variant" value="normal"/>
-            </attributes>
-          </object>
-        </child>
+        <property name="icon_name">document-send-symbolic</property>
+        <property name="icon_size">6</property>
       </object>
       <packing>
         <property name="expand">False</property>
@@ -32,21 +23,14 @@
       </packing>
     </child>
     <child>
-      <object class="GtkAlignment" id="alignment2">
+      <object class="GtkLabel" id="label">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="top_padding">4</property>
-        <property name="bottom_padding">4</property>
-        <property name="left_padding">8</property>
-        <property name="right_padding">8</property>
-        <child>
-          <object class="GtkProgressBar" id="progressbar">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="pulse_step">0.10000000149</property>
-            <property name="show_text">True</property>
-          </object>
-        </child>
+        <property name="margin_top">6</property>
+        <property name="label">&lt;placeholder&gt;</property>
+        <style>
+          <class name="bold"/>
+        </style>
       </object>
       <packing>
         <property name="expand">False</property>
@@ -54,5 +38,52 @@
         <property name="position">1</property>
       </packing>
     </child>
+    <child>
+      <object class="GtkLabel" id="progress_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="label">&lt;progress&gt;</property>
+        <style>
+          <class name="dim-label"/>
+        </style>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkProgressBar" id="progressbar">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_top">6</property>
+        <property name="pulse_step">0.10000000149</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">3</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="cancel_upload_button">
+        <property name="label" translatable="yes">Cancel Upload</property>
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">True</property>
+        <property name="halign">center</property>
+        <property name="margin_top">6</property>
+        <signal name="clicked" handler="on_cancel_upload_button_clicked" swapped="no"/>
+        <style>
+          <class name="destructive-action"/>
+        </style>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">4</property>
+      </packing>
+    </child>
   </object>
 </interface>
diff --git a/gajim/dialogs.py b/gajim/dialogs.py
index bce1448fd0047ba28f24d8f989975a11754d17fb..bd9ee693cefa07e2a884a6c268adcc067fd1cae8 100644
--- a/gajim/dialogs.py
+++ b/gajim/dialogs.py
@@ -55,6 +55,7 @@ from gajim.common.exceptions import GajimGeneralException
 # Compat with Gajim 1.0.3 for plugins
 from gajim.gtk.dialogs import *
 from gajim.gtk.add_contact import AddNewContactWindow
+from gajim.gtk.util import get_builder
 
 
 log = logging.getLogger('gajim.dialogs')
@@ -1733,22 +1734,18 @@ class ProgressWindow(Gtk.ApplicationWindow):
         self.set_position(Gtk.WindowPosition.CENTER)
         self.set_show_menubar(False)
         self.set_title(_('File Transfer'))
-        self.set_default_size(250, -1)
 
         self.event = file.event
         self.file = file
-        self.xml = gtkgui_helpers.get_gtk_builder(
-            'httpupload_progress_dialog.ui')
-
-        self.label = self.xml.get_object('label')
-        self.progressbar = self.xml.get_object('progressbar')
+        self._ui = get_builder('httpupload_progress_dialog.ui')
 
-        self.add(self.xml.get_object('box'))
+        self.add(self._ui.box)
 
         self.pulse = GLib.timeout_add(100, self._pulse_progressbar)
         self.show_all()
 
         self.connect('destroy', self._on_destroy)
+        self._ui.connect_signals(self)
         app.ged.register_event_handler('httpupload-progress', ged.CORE,
                                        self._on_httpupload_progress)
 
@@ -1756,20 +1753,23 @@ class ProgressWindow(Gtk.ApplicationWindow):
         if self.file != obj.file:
             return
         if obj.status == 'request':
-            self.label.set_text(_('Requesting HTTP Upload Slot…'))
+            self._ui.label.set_text(_('Requesting HTTP Upload Slot…'))
         elif obj.status == 'close':
             self.destroy()
         elif obj.status == 'upload':
-            self.label.set_text(_('Uploading file via HTTP File Upload…'))
+            self._ui.label.set_text(_('Uploading file via HTTP File Upload…'))
         elif obj.status == 'update':
             self.update_progress(obj.seen, obj.total)
         elif obj.status == 'encrypt':
-            self.label.set_text(_('Encrypting file…'))
+            self._ui.label.set_text(_('Encrypting file…'))
 
     def _pulse_progressbar(self):
-        self.progressbar.pulse()
+        self._ui.progressbar.pulse()
         return True
 
+    def on_cancel_upload_button_clicked(self, widget):
+        self.destroy()
+
     def _on_destroy(self, *args):
         self.event.set()
         if self.pulse:
@@ -1783,6 +1783,9 @@ class ProgressWindow(Gtk.ApplicationWindow):
         if self.pulse:
             GLib.source_remove(self.pulse)
             self.pulse = None
-        pct = (float(seen) / total) * 100.0
-        self.progressbar.set_fraction(float(seen) / total)
-        self.progressbar.set_text(str(int(pct)) + "%")
+        self._ui.progressbar.set_fraction(float(seen) / total)
+        size_total = round(total / (1024 * 1024), 1)
+        size_progress = round(seen / (1024 * 1024), 1)
+        self._ui.progress_label.set_text(
+            _('%(progress)s of %(total)s MiB sent') % \
+            {'progress': str(size_progress), 'total': str(size_total)})