[Xfce4-commits] [panel-plugins/xfce4-hardware-monitor-plugin] 03/29: Implementing user-configurable monitor refresh rates

noreply at xfce.org noreply at xfce.org
Mon Dec 18 12:45:34 CET 2017


This is an automated email from the git hooks/post-receive script.

o   m   e   g   a   p   h   i   l       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository panel-plugins/xfce4-hardware-monitor-plugin.

commit c3b8584d130f3bcc0854da8b93fe6e022c845522
Author: OmegaPhil <OmegaPhil at startmail.com>
Date:   Sun Nov 19 12:53:56 2017 +0000

    Implementing user-configurable monitor refresh rates
    
    Bugs #13796 / https://bugzilla.xfce.org/show_bug.cgi?id=13796
    and #13803 / https://bugzilla.xfce.org/show_bug.cgi?id=13803
    show there is clear interest for manually defining how often a
    monitor updates.
    
    Implementing this allows users to add multiple different monitor
    types to a single view and allow for the update rates of all
    monitors to be the same via configuration, resulting in everything
    sharing the same time axis. Users can still combine slower monitors
    at their default rates in the same view allowing to continue their
    normal usage of the plugin (taking on Ted's patch in #13796 would
    force all monitors to output points on the graph at the maximum
    rate of 1/second, regardless of actual measurement update rate,
    via addition of dupes to the data)
---
 src/choose-monitor-window.cpp |  323 +++++++--
 src/choose-monitor-window.hpp |   26 +-
 src/monitor-impls.cpp         |  925 +++++++++++++-----------
 src/monitor-impls.hpp         |  112 ++-
 src/monitor.hpp               |   11 +-
 src/ui.glade                  | 1582 +++++++++++++++++++++++++++++++----------
 6 files changed, 2153 insertions(+), 826 deletions(-)

diff --git a/src/choose-monitor-window.cpp b/src/choose-monitor-window.cpp
index 3ecfc92..bc76a08 100644
--- a/src/choose-monitor-window.cpp
+++ b/src/choose-monitor-window.cpp
@@ -39,9 +39,19 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin,
   : xfce_plugin(xfce_plugin)
 {
   // Now we are forced to use top-level widgets this is much more over the top...
-  std::vector<Glib::ustring> objects(2);
+  std::vector<Glib::ustring> objects(12);
   objects[0] = "choose_monitor_window";
   objects[1] = "cpu_no_adjustment";
+  objects[2] = "cpu_usage_refresh_delay_adjustment";
+  objects[3] = "disk_stats_refresh_delay_adjustment";
+  objects[4] = "disk_usage_refresh_delay_adjustment";
+  objects[5] = "fan_delay_adjustment";
+  objects[6] = "generic_delay_adjustment";
+  objects[7] = "load_average_refresh_delay_adjustment";
+  objects[8] = "memory_refresh_delay_adjustment";
+  objects[9] = "network_load_delay_adjustment";
+  objects[10] = "swap_refresh_delay_adjustment";
+  objects[11] = "temperature_delay_adjustment";
   ui = get_builder_xml(objects);
 
   ui->get_widget("choose_monitor_window", window);
@@ -52,43 +62,69 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin,
   ui->get_widget("device_notebook", device_notebook);
 
   ui->get_widget("cpu_usage_radiobutton", cpu_usage_radiobutton);
-  ui->get_widget("memory_usage_radiobutton", memory_usage_radiobutton);
-  ui->get_widget("swap_usage_radiobutton", swap_usage_radiobutton);
-  ui->get_widget("load_average_radiobutton", load_average_radiobutton);
-  ui->get_widget("disk_usage_radiobutton", disk_usage_radiobutton);
-  ui->get_widget("disk_stats_radiobutton", disk_stats_radiobutton);
-  ui->get_widget("network_load_radiobutton", network_load_radiobutton);
-  ui->get_widget("temperature_radiobutton", temperature_radiobutton);
-  ui->get_widget("fan_speed_radiobutton", fan_speed_radiobutton);
-  ui->get_widget("generic_radiobutton", generic_radiobutton);
-
   ui->get_widget("cpu_usage_options", cpu_usage_options);
-  ui->get_widget("load_average_options", load_average_options);
-  ui->get_widget("disk_usage_options", disk_usage_options);
-  ui->get_widget("disk_stats_options", disk_stats_options);
-  ui->get_widget("memory_usage_options", memory_usage_options);
-  ui->get_widget("swap_usage_options", swap_usage_options);
-  ui->get_widget("network_load_options", network_load_options);
-
   ui->get_widget("all_cpus_radiobutton", all_cpus_radiobutton);
   ui->get_widget("one_cpu_radiobutton", one_cpu_radiobutton);
   ui->get_widget("cpu_no_spinbutton", cpu_no_spinbutton);
   ui->get_widget("cpu_usage_tag_entry", cpu_tag);
+  ui->get_widget("cpu_usage_refresh_delay_spinbutton",
+                 cpu_usage_refresh_delay_spinbutton);
+  ui->get_widget("cpu_usage_refresh_delay_default_button",
+                 cpu_usage_refresh_delay_default_button);
+
+  ui->get_widget("load_average_radiobutton", load_average_radiobutton);
+  ui->get_widget("load_average_options", load_average_options);
   ui->get_widget("load_average_tag_entry", load_average_tag);
+  ui->get_widget("load_average_refresh_delay_spinbutton",
+                 load_average_refresh_delay_spinbutton);
+  ui->get_widget("load_average_refresh_delay_default_button",
+                 load_average_refresh_delay_default_button);
 
+  ui->get_widget("disk_usage_radiobutton", disk_usage_radiobutton);
+  ui->get_widget("disk_usage_options", disk_usage_options);
   ui->get_widget("mount_dir_entry", mount_dir_entry);
   ui->get_widget("show_free_checkbutton", show_free_checkbutton);
   ui->get_widget("disk_usage_tag_entry", disk_usage_tag);
+  ui->get_widget("disk_usage_refresh_delay_spinbutton",
+                 disk_usage_refresh_delay_spinbutton);
+  ui->get_widget("disk_usage_refresh_delay_default_button",
+                 disk_usage_refresh_delay_default_button);
+
+  ui->get_widget("disk_stats_radiobutton", disk_stats_radiobutton);
+  ui->get_widget("disk_stats_options", disk_stats_options);
   ui->get_widget("disk_stats_device_combobox", disk_stats_device_combobox);
   ui->get_widget("disk_stats_stat_combobox", disk_stats_stat_combobox);
   ui->get_widget("disk_stats_tag_entry", disk_stats_tag);
-  ui->get_widget("memory_tag_entry", memory_usage_tag);
+  ui->get_widget("disk_stats_refresh_delay_spinbutton",
+                 disk_stats_refresh_delay_spinbutton);
+  ui->get_widget("disk_stats_refresh_delay_default_button",
+                 disk_stats_refresh_delay_default_button);
+
+  ui->get_widget("swap_usage_radiobutton", swap_usage_radiobutton);
+  ui->get_widget("swap_usage_options", swap_usage_options);
   ui->get_widget("swap_tag_entry", swap_usage_tag);
+  ui->get_widget("swap_refresh_delay_spinbutton", swap_refresh_delay_spinbutton);
+  ui->get_widget("swap_refresh_delay_default_button",
+                 swap_refresh_delay_default_button);
 
+  ui->get_widget("memory_usage_radiobutton", memory_usage_radiobutton);
+  ui->get_widget("memory_usage_options", memory_usage_options);
+  ui->get_widget("memory_tag_entry", memory_usage_tag);
+  ui->get_widget("memory_refresh_delay_spinbutton",
+                 memory_refresh_delay_spinbutton);
+  ui->get_widget("memory_refresh_delay_default_button",
+                 memory_refresh_delay_default_button);
+
+  ui->get_widget("network_load_radiobutton", network_load_radiobutton);
+  ui->get_widget("network_load_options", network_load_options);
   ui->get_widget("network_type_combobox", network_type_combobox);
   ui->get_widget("network_direction_combobox", network_direction_combobox);
   ui->get_widget("network_interfaces_treeview", network_interfaces_treeview);
   ui->get_widget("network_load_tag_entry", network_load_tag);
+  ui->get_widget("network_load_refresh_delay_spinbutton",
+                 network_load_refresh_delay_spinbutton);
+  ui->get_widget("network_load_refresh_delay_default_button",
+                 network_load_refresh_delay_default_button);
 
   /* Need special code here to set the desired stock icon as GTK Builder doesn't
    * support setting a stock icon but custom text, and as soon as you change the
@@ -102,16 +138,27 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin,
                                           Gtk::ICON_SIZE_BUTTON));
   network_interfaces_restore_defaults_button->set_image(*stock_image);
 
+  ui->get_widget("temperature_radiobutton", temperature_radiobutton);
   ui->get_widget("temperature_box", temperature_box);
   ui->get_widget("temperature_options", temperature_options);
   ui->get_widget("temperature_combobox", temperature_combobox);
   ui->get_widget("temperature_tag_entry", temperature_tag);
+  ui->get_widget("temperature_refresh_delay_spinbutton",
+                 temperature_refresh_delay_spinbutton);
+  ui->get_widget("temperature_refresh_delay_default_button",
+                 temperature_refresh_delay_default_button);
 
+  ui->get_widget("fan_speed_radiobutton", fan_speed_radiobutton);
   ui->get_widget("fan_speed_box", fan_speed_box);
   ui->get_widget("fan_speed_options", fan_speed_options);
   ui->get_widget("fan_speed_combobox", fan_speed_combobox);
   ui->get_widget("fan_speed_tag_entry", fan_speed_tag);
+  ui->get_widget("fan_speed_refresh_delay_spinbutton",
+                 fan_speed_refresh_delay_spinbutton);
+  ui->get_widget("fan_speed_refresh_delay_default_button",
+                 fan_speed_refresh_delay_default_button);
 
+  ui->get_widget("generic_radiobutton", generic_radiobutton);
   ui->get_widget("generic_box", generic_box);
   ui->get_widget("generic_options", generic_options);
   ui->get_widget("generic_file_path_entry", generic_file_path_entry);
@@ -137,65 +184,103 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin,
   ui->get_widget("generic_units_long_entry", generic_units_long_entry);
   ui->get_widget("generic_units_short_entry", generic_units_short_entry);
   ui->get_widget("generic_tag_entry", generic_tag);
+  ui->get_widget("generic_refresh_delay_spinbutton",
+                 generic_refresh_delay_spinbutton);
+  ui->get_widget("generic_refresh_delay_default_button",
+                 generic_refresh_delay_default_button);
 
   cpu_usage_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_cpu_usage_radiobutton_toggled));
+  cpu_usage_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_cpu_usage_refresh_delay_default_button_clicked));
 
   load_average_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_load_average_radiobutton_toggled));
+  load_average_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_load_average_refresh_delay_default_button_clicked));
 
   disk_usage_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_disk_usage_radiobutton_toggled));
+  disk_usage_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_disk_usage_refresh_delay_default_button_clicked));
 
   disk_stats_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_disk_stats_radiobutton_toggled));
-
-  memory_usage_radiobutton->signal_toggled()
+  disk_stats_refresh_delay_default_button->signal_clicked()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
-                        on_memory_usage_radiobutton_toggled));
+                        on_disk_stats_refresh_delay_default_button_clicked));
 
   swap_usage_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_swap_usage_radiobutton_toggled));
+  swap_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_swap_refresh_delay_default_button_clicked));
+
+  memory_usage_radiobutton->signal_toggled()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_memory_usage_radiobutton_toggled));
+  memory_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_memory_refresh_delay_default_button_clicked));
 
   network_load_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_network_load_radiobutton_toggled));
-
   network_interfaces_restore_defaults_button->signal_clicked()
       .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_network_interfaces_restore_defaults_button_clicked));
+  network_load_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_network_load_refresh_delay_default_button_clicked));
 
   temperature_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_temperature_radiobutton_toggled));
+  temperature_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_temperature_refresh_delay_default_button_clicked));
 
   fan_speed_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_fan_speed_radiobutton_toggled));
+  fan_speed_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_fan_speed_refresh_delay_default_button_clicked));
 
   generic_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_generic_radiobutton_toggled));
-
   generic_extract_via_regex_radiobutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_generic_extract_via_regex_radiobutton_toggled));
-
   generic_change_in_value_checkbutton->signal_toggled()
     .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
                         on_generic_change_in_value_checkbutton_toggled));
+  generic_refresh_delay_default_button->signal_clicked()
+    .connect(sigc::mem_fun(*this, &ChooseMonitorWindow::
+                        on_generic_refresh_delay_default_button_clicked));
 
   // Note 1 off to avoid counting from zero in the interface
   cpu_no_spinbutton->set_range(1, CpuUsageMonitor::max_no_cpus);
 
-#if !HAVE_LIBSENSORS            // No sensors support, no options for it
-  device_notebook->get_nth_page(3)->hide();
-#endif
+  /* While I have set the defaults in the ui.glade Adjustment.Values, best to
+   * maintain it here */
+  cpu_usage_refresh_delay_spinbutton->set_value(
+        CpuUsageMonitor::update_interval_default / 1000);
+
+  load_average_refresh_delay_spinbutton->set_value(
+        LoadAverageMonitor::update_interval_default / 1000);
+
+  disk_usage_refresh_delay_spinbutton->set_value(
+        DiskUsageMonitor::update_interval_default / 1000);
 
   /* Setup disk statistics device name combobox - no column packing needed here
    * since this seems to be done automatically when a text entry is included */
@@ -226,6 +311,15 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin,
           stat_to_string(stat, false);
   }
 
+  disk_stats_refresh_delay_spinbutton->set_value(
+        DiskStatsMonitor::update_interval_default / 1000);
+
+  swap_refresh_delay_spinbutton->set_value(
+        SwapUsageMonitor::update_interval_default / 1000);
+
+  memory_refresh_delay_spinbutton->set_value(
+        MemoryUsageMonitor::update_interval_default / 1000);
+
   // Setup network interface type combobox
   static NetworkInterfaceTypeCols nitc;
   network_interface_type_store = Gtk::ListStore::create(nitc);
@@ -255,6 +349,13 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin,
       (*iter)[ndc.direction] = NetworkLoadMonitor::direction_to_string(direction);
   }
 
+  network_load_refresh_delay_spinbutton->set_value(
+        NetworkLoadMonitor::update_interval_default / 1000);
+
+#if !HAVE_LIBSENSORS            // No sensors support, no options for it
+  device_notebook->get_nth_page(3)->hide();
+#endif
+
   // Setup temperature combobox
   static SensorsCols tsc;
   temp_sensors_store = Gtk::ListStore::create(tsc);
@@ -287,6 +388,9 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin,
     }
   }
 
+  temperature_refresh_delay_spinbutton->set_value(
+        TemperatureMonitor::update_interval_default / 1000);
+
   // Setup fan combobox
   static SensorsCols fsc;
   fan_sensors_store = Gtk::ListStore::create(fsc);
@@ -318,6 +422,12 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin,
     }
   }
 
+  fan_speed_refresh_delay_spinbutton->set_value(
+        FanSpeedMonitor::update_interval_default / 1000);
+
+  generic_refresh_delay_spinbutton->set_value(
+        GenericMonitor::update_interval_default / 1000);
+
   /* Fix border on help linkbutton - border is specified in the glade config, yet
    * it is ignored?? */
   Gtk::LinkButton *link_button;
@@ -352,48 +462,85 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir)
       xfce_rc_set_group(settings_ro, mon_dir.c_str());
       Glib::ustring type = xfce_rc_read_entry(settings_ro, "type", ""),
                     tag = xfce_rc_read_entry(settings_ro, "tag", "");
+      int update_interval = xfce_rc_read_int_entry(settings_ro,
+                                                   "update_interval", -1);
 
       if (type == "memory_usage")
       {
         device_notebook->set_current_page(1);
         memory_usage_radiobutton->set_active();
         memory_usage_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = MemoryUsageMonitor::update_interval_default;
+        memory_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
       else if (type == "load_average")
       {
         device_notebook->set_current_page(0);
         load_average_radiobutton->set_active();
         load_average_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = LoadAverageMonitor::update_interval_default;
+        load_average_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
       else if (type == "disk_usage")
       {
         device_notebook->set_current_page(1);
         disk_usage_radiobutton->set_active();
         disk_usage_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = DiskUsageMonitor::update_interval_default;
+        disk_usage_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
       else if (type == "disk_statistics")
       {
         device_notebook->set_current_page(1);
         disk_stats_radiobutton->set_active();
         disk_stats_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = DiskStatsMonitor::update_interval_default;
+        disk_stats_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
       else if (type == "swap_usage")
       {
         device_notebook->set_current_page(1);
         swap_usage_radiobutton->set_active();
         swap_usage_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = SwapUsageMonitor::update_interval_default;
+        swap_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
       else if (type == "network_load")
       {
         device_notebook->set_current_page(2);
         network_load_radiobutton->set_active();
         network_load_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = NetworkLoadMonitor::update_interval_default;
+        network_load_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
       else if (type == "temperature")
       {
         device_notebook->set_current_page(3);
         temperature_radiobutton->set_active();
         temperature_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = TemperatureMonitor::update_interval_default;
+        temperature_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
 
       // TODO: When I start supporting it, why no fan stuff here?
@@ -403,12 +550,22 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir)
         device_notebook->set_current_page(4);
         generic_radiobutton->set_active();
         generic_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = GenericMonitor::update_interval_default;
+        generic_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
       else
       {
         device_notebook->set_current_page(0);
         cpu_usage_radiobutton->set_active();
         cpu_tag->set_text(tag);
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = CpuUsageMonitor::update_interval_default;
+        cpu_usage_refresh_delay_spinbutton->set_value(update_interval / 1000);
       }
       
       // Fill in cpu info
@@ -694,17 +851,32 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir)
       if (cpu_usage_radiobutton->get_active())
       {
         if (one_cpu_radiobutton->get_active())
-          mon = new CpuUsageMonitor(int(cpu_no_spinbutton->get_value()) - 1,
-                                    cpu_tag->get_text());
+          mon = new CpuUsageMonitor(
+                int(cpu_no_spinbutton->get_value()) - 1, cpu_tag->get_text(),
+                int(cpu_usage_refresh_delay_spinbutton->get_value() * 1000));
         else
-          mon = new CpuUsageMonitor(cpu_tag->get_text());
+          mon = new CpuUsageMonitor(
+                cpu_tag->get_text(),
+                int(cpu_usage_refresh_delay_spinbutton->get_value() * 1000));
       }
       else if (memory_usage_radiobutton->get_active())
-        mon = new MemoryUsageMonitor(memory_usage_tag->get_text());
+      {
+        mon = new MemoryUsageMonitor(
+              memory_usage_tag->get_text(),
+              int(memory_refresh_delay_spinbutton->get_value() * 1000));
+      }
       else if (swap_usage_radiobutton->get_active())
-        mon = new SwapUsageMonitor(swap_usage_tag->get_text());
+      {
+        mon = new SwapUsageMonitor(
+              swap_usage_tag->get_text(),
+              int(swap_refresh_delay_spinbutton->get_value() * 1000));
+      }
       else if (load_average_radiobutton->get_active())
-        mon = new LoadAverageMonitor(load_average_tag->get_text());
+      {
+        mon = new LoadAverageMonitor(
+              load_average_tag->get_text(),
+              int(load_average_refresh_delay_spinbutton->get_value() * 1000));
+      }
       else if (disk_usage_radiobutton->get_active())
       {
         Glib::ustring mount_dir = mount_dir_entry->get_text();
@@ -735,7 +907,8 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir)
         }
 
         mon = new DiskUsageMonitor(mount_dir, show_free,
-                                   disk_usage_tag->get_text());
+                                   disk_usage_tag->get_text(),
+                  int(disk_usage_refresh_delay_spinbutton->get_value() * 1000));
       }
       else if (disk_stats_radiobutton->get_active())
       {
@@ -775,7 +948,8 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir)
         }
 
         mon = new DiskStatsMonitor(device_name, stat,
-                                   disk_stats_tag->get_text());
+                                   disk_stats_tag->get_text(),
+                  int(disk_stats_refresh_delay_spinbutton->get_value() * 1000));
       }
       else if (network_load_radiobutton->get_active())
       {
@@ -818,14 +992,22 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir)
         }
 
         mon = new NetworkLoadMonitor(interface_type, dir,
-                                     network_load_tag->get_text(), xfce_plugin);
+                                     network_load_tag->get_text(),
+                int(network_load_refresh_delay_spinbutton->get_value() * 1000),
+                                     xfce_plugin);
       }
       else if (temperature_radiobutton->get_active())
+      {
         mon = new TemperatureMonitor(temperature_combobox->get_active_row_number(),
-                                     temperature_tag->get_text());
+                                     temperature_tag->get_text(),
+                 int(temperature_refresh_delay_spinbutton->get_value() * 1000));
+      }
       else if (fan_speed_radiobutton->get_active())
+      {
         mon = new FanSpeedMonitor(fan_speed_combobox->get_active_row_number(),
-                                  fan_speed_tag->get_text());
+                                  fan_speed_tag->get_text(),
+                   int(fan_speed_refresh_delay_spinbutton->get_value() * 1000));
+      }
       else if (generic_radiobutton->get_active())
       {
         Glib::ustring file_path = generic_file_path_entry->get_text(),
@@ -959,7 +1141,8 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir)
         mon = new GenericMonitor(file_path, value_from_contents, regex_string,
                                  follow_change, dir, data_source_name_long,
                                  data_source_name_short, units_long, units_short,
-                                 generic_tag->get_text());
+                                 generic_tag->get_text(),
+                     int(generic_refresh_delay_spinbutton->get_value() * 1000));
       }
 
       return mon;
@@ -979,36 +1162,72 @@ void ChooseMonitorWindow::on_cpu_usage_radiobutton_toggled()
     = cpu_usage_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_cpu_usage_refresh_delay_default_button_clicked()
+{
+  cpu_usage_refresh_delay_spinbutton->set_value(
+        CpuUsageMonitor::update_interval_default / 1000);
+}
+
 void ChooseMonitorWindow::on_load_average_radiobutton_toggled()
 {
   load_average_options->property_sensitive()
     = load_average_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_load_average_refresh_delay_default_button_clicked()
+{
+  load_average_refresh_delay_spinbutton->set_value(
+        LoadAverageMonitor::update_interval_default / 1000);
+}
+
 void ChooseMonitorWindow::on_disk_usage_radiobutton_toggled()
 {
   disk_usage_options->property_sensitive()
     = disk_usage_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_disk_usage_refresh_delay_default_button_clicked()
+{
+  disk_usage_refresh_delay_spinbutton->set_value(
+        DiskUsageMonitor::update_interval_default / 1000);
+}
+
 void ChooseMonitorWindow::on_disk_stats_radiobutton_toggled()
 {
   disk_stats_options->property_sensitive()
     = disk_stats_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_disk_stats_refresh_delay_default_button_clicked()
+{
+  disk_stats_refresh_delay_spinbutton->set_value(
+        DiskStatsMonitor::update_interval_default / 1000);
+}
+
 void ChooseMonitorWindow::on_swap_usage_radiobutton_toggled()
 {
   swap_usage_options->property_sensitive()
     = swap_usage_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_swap_refresh_delay_default_button_clicked()
+{
+  swap_refresh_delay_spinbutton->set_value(
+        SwapUsageMonitor::update_interval_default / 1000);
+}
+
 void ChooseMonitorWindow::on_memory_usage_radiobutton_toggled()
 {
   memory_usage_options->property_sensitive()
     = memory_usage_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_memory_refresh_delay_default_button_clicked()
+{
+  memory_refresh_delay_spinbutton->set_value(
+        MemoryUsageMonitor::update_interval_default / 1000);
+}
+
 /* Triggered when user edits a network interface name after revealing the
  * advanced widgets */
 void ChooseMonitorWindow::on_network_interface_name_edited(
@@ -1118,18 +1337,36 @@ void ChooseMonitorWindow::on_network_load_radiobutton_toggled()
     = network_load_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_network_load_refresh_delay_default_button_clicked()
+{
+  network_load_refresh_delay_spinbutton->set_value(
+        NetworkLoadMonitor::update_interval_default / 1000);
+}
+
 void ChooseMonitorWindow::on_temperature_radiobutton_toggled()
 {
   temperature_options->property_sensitive()
     = temperature_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_temperature_refresh_delay_default_button_clicked()
+{
+  temperature_refresh_delay_spinbutton->set_value(
+        TemperatureMonitor::update_interval_default / 1000);
+}
+
 void ChooseMonitorWindow::on_fan_speed_radiobutton_toggled()
 {
   fan_speed_options->property_sensitive()
     = fan_speed_radiobutton->get_active();
 }
 
+void ChooseMonitorWindow::on_fan_speed_refresh_delay_default_button_clicked()
+{
+  fan_speed_refresh_delay_spinbutton->set_value(
+        DiskStatsMonitor::update_interval_default / 1000);
+}
+
 void ChooseMonitorWindow::on_generic_radiobutton_toggled()
 {
   generic_options->property_sensitive()
@@ -1148,6 +1385,12 @@ void ChooseMonitorWindow::on_generic_change_in_value_checkbutton_toggled()
     = generic_change_in_value_checkbutton->get_active();
 }
 
+void ChooseMonitorWindow::on_generic_refresh_delay_default_button_clicked()
+{
+  generic_refresh_delay_spinbutton->set_value(
+        GenericMonitor::update_interval_default / 1000);
+}
+
 bool ChooseMonitorWindow::on_closed(GdkEventAny *)
 {
   window->hide();
diff --git a/src/choose-monitor-window.hpp b/src/choose-monitor-window.hpp
index 2a99805..6506da3 100644
--- a/src/choose-monitor-window.hpp
+++ b/src/choose-monitor-window.hpp
@@ -71,8 +71,22 @@ private:
 
   Gtk::Box *cpu_usage_options, *load_average_options;
   Gtk::RadioButton *all_cpus_radiobutton, *one_cpu_radiobutton;
-  Gtk::SpinButton *cpu_no_spinbutton;
+  Gtk::SpinButton *cpu_no_spinbutton, *cpu_usage_refresh_delay_spinbutton,
+    *load_average_refresh_delay_spinbutton, *disk_usage_refresh_delay_spinbutton,
+    *disk_stats_refresh_delay_spinbutton, *swap_refresh_delay_spinbutton,
+    *memory_refresh_delay_spinbutton, *network_load_refresh_delay_spinbutton,
+    *temperature_refresh_delay_spinbutton, *fan_speed_refresh_delay_spinbutton,
+    *generic_refresh_delay_spinbutton;
   Gtk::Entry *cpu_tag, *load_average_tag;
+  Gtk::Button *cpu_usage_refresh_delay_default_button,
+    *load_average_refresh_delay_default_button,
+    *disk_usage_refresh_delay_default_button,
+    *disk_stats_refresh_delay_default_button, *swap_refresh_delay_default_button,
+    *memory_refresh_delay_default_button,
+    *network_load_refresh_delay_default_button,
+    *temperature_refresh_delay_default_button,
+    *fan_speed_refresh_delay_default_button,
+    *generic_refresh_delay_default_button;
 
   Gtk::Box *disk_usage_options, *disk_stats_options, *memory_usage_options,
            *swap_usage_options;
@@ -184,20 +198,30 @@ private:
 
   // GUI
   void on_cpu_usage_radiobutton_toggled();
+  void on_cpu_usage_refresh_delay_default_button_clicked();
   void on_load_average_radiobutton_toggled();
+  void on_load_average_refresh_delay_default_button_clicked();
   void on_disk_usage_radiobutton_toggled();
+  void on_disk_usage_refresh_delay_default_button_clicked();
   void on_disk_stats_radiobutton_toggled();
+  void on_disk_stats_refresh_delay_default_button_clicked();
   void on_swap_usage_radiobutton_toggled();
+  void on_swap_refresh_delay_default_button_clicked();
   void on_memory_usage_radiobutton_toggled();
+  void on_memory_refresh_delay_default_button_clicked();
   void on_network_interfaces_restore_defaults_button_clicked();
   void on_network_interface_name_edited(const Glib::ustring& path,
                                         const Glib::ustring& new_text);
   void on_network_load_radiobutton_toggled();
+  void on_network_load_refresh_delay_default_button_clicked();
   void on_temperature_radiobutton_toggled();
+  void on_temperature_refresh_delay_default_button_clicked();
   void on_fan_speed_radiobutton_toggled();
+  void on_fan_speed_refresh_delay_default_button_clicked();
   void on_generic_radiobutton_toggled();
   void on_generic_extract_via_regex_radiobutton_toggled();
   void on_generic_change_in_value_checkbutton_toggled();
+  void on_generic_refresh_delay_default_button_clicked();
   bool on_closed(GdkEventAny *);
 };
 
diff --git a/src/monitor-impls.cpp b/src/monitor-impls.cpp
index f9a717b..c9ddec4 100644
--- a/src/monitor-impls.cpp
+++ b/src/monitor-impls.cpp
@@ -79,23 +79,48 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin)
       Glib::ustring type = xfce_rc_read_entry(settings_ro, "type", ""),
           tag = xfce_rc_read_entry(settings_ro, "tag", "");
 
+      int update_interval = xfce_rc_read_int_entry(settings_ro,
+                                                   "update_interval", -1);
+
       if (type == "cpu_usage")
       {
         // Obtaining cpu_no
         int cpu_no = xfce_rc_read_int_entry(settings_ro, "cpu_no", -1);
 
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = CpuUsageMonitor::update_interval_default;
+
         // Creating CPU usage monitor with provided number if valid
         if (cpu_no == -1)
-          monitors.push_back(new CpuUsageMonitor(tag));
+          monitors.push_back(new CpuUsageMonitor(tag, update_interval));
         else
-          monitors.push_back(new CpuUsageMonitor(cpu_no, tag));
+          monitors.push_back(new CpuUsageMonitor(cpu_no, tag, update_interval));
       }
       else if (type == "memory_usage")
-        monitors.push_back(new MemoryUsageMonitor(tag));
+      {
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = MemoryUsageMonitor::update_interval_default;
+
+        monitors.push_back(new MemoryUsageMonitor(tag, update_interval));
+      }
       else if (type == "swap_usage")
-        monitors.push_back(new SwapUsageMonitor(tag));
+      {
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = SwapUsageMonitor::update_interval_default;
+
+        monitors.push_back(new SwapUsageMonitor(tag, update_interval));
+      }
       else if (type == "load_average")
-        monitors.push_back(new LoadAverageMonitor(tag));
+      {
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = LoadAverageMonitor::update_interval_default;
+
+        monitors.push_back(new LoadAverageMonitor(tag, update_interval));
+      }
       else if (type == "disk_usage")
       {
         // Obtaining volume mount directory
@@ -106,8 +131,13 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin)
         bool show_free = xfce_rc_read_bool_entry(settings_ro, "show_free",
           false);
 
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = DiskUsageMonitor::update_interval_default;
+
         // Creating disk usage monitor
-        monitors.push_back(new DiskUsageMonitor(mount_dir, show_free, tag));
+        monitors.push_back(new DiskUsageMonitor(mount_dir, show_free, tag,
+                                                update_interval));
       }
       else if (type == "disk_statistics")
       {
@@ -117,10 +147,15 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin)
         DiskStatsMonitor::Stat stat =
             static_cast<DiskStatsMonitor::Stat>(xfce_rc_read_int_entry(
                                                 settings_ro,                                                                                                                                       "disk_stats_stat",
-                                               DiskStatsMonitor::num_reads_completed));
+                                        DiskStatsMonitor::num_reads_completed));
+
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = DiskStatsMonitor::update_interval_default;
 
         // Creating disk statistics monitor
-        monitors.push_back(new DiskStatsMonitor(device_name, stat, tag));
+        monitors.push_back(new DiskStatsMonitor(device_name, stat, tag,
+                                                update_interval));
       }
       else if (type == "network_load")
       {
@@ -203,9 +238,14 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin)
           inter_direction = NetworkLoadMonitor::all_data;
         }
 
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = NetworkLoadMonitor::update_interval_default;
+
         // Creating network load monitor
         monitors.push_back(new NetworkLoadMonitor(inter_type, inter_direction,
-                                                  tag, panel_plugin));
+                                                  tag, update_interval,
+                                                  panel_plugin));
       }
       else if (type == "temperature")
       {
@@ -213,16 +253,25 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin)
         int temperature_no = xfce_rc_read_int_entry(settings_ro,
           "temperature_no", 0);
 
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = TemperatureMonitor::update_interval_default;
+
         // Creating temperature monitor
-        monitors.push_back(new TemperatureMonitor(temperature_no, tag));
+        monitors.push_back(new TemperatureMonitor(temperature_no, tag,
+                                                  update_interval));
       }
       else if (type == "fan_speed")
       {
         // Fetching fan number
         int fan_no = xfce_rc_read_int_entry(settings_ro, "fan_no", 0);
 
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = FanSpeedMonitor::update_interval_default;
+
         // Creating fan monitor
-        monitors.push_back(new FanSpeedMonitor(fan_no, tag));
+        monitors.push_back(new FanSpeedMonitor(fan_no, tag, update_interval));
       }
 
       else if (type == "generic")
@@ -259,12 +308,16 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin)
           dir = GenericMonitor::positive;
         }
 
+        // Enforcing default update interval when it isn't present
+        if (update_interval == -1)
+          update_interval = GenericMonitor::update_interval_default;
+
         // Creating generic monitor
         monitors.push_back(new GenericMonitor(file_path, value_from_contents,
                                               regex_string, follow_change, dir,
                                               data_source_name_long,
                                               data_source_name_short, units_long,
-                                              units_short, tag));
+                                              units_short, tag, update_interval));
       }
 
       // Saving the monitor's settings root
@@ -277,7 +330,7 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin)
 
   // Always start with a CpuUsageMonitor
   if (monitors.empty())
-    monitors.push_back(new CpuUsageMonitor(""));
+    monitors.push_back(new CpuUsageMonitor("", 1000));
 
   return monitors;
 }
@@ -334,17 +387,20 @@ Precision decimal_digits(double val, int n)
 //
 // class CpuUsageMonitor
 //
-
+// Static initialisation
 int const CpuUsageMonitor::max_no_cpus = GLIBTOP_NCPU;
+int const CpuUsageMonitor::update_interval_default = 1000;
+
 
-CpuUsageMonitor::CpuUsageMonitor(const Glib::ustring &tag_string)
-  : Monitor(tag_string), cpu_no(all_cpus), total_time(0), nice_time(0),
+CpuUsageMonitor::CpuUsageMonitor(const Glib::ustring &tag_string, int interval)
+  : Monitor(tag_string, interval), cpu_no(all_cpus), total_time(0), nice_time(0),
     idle_time(0), iowait_time(0)
 {}
 
-CpuUsageMonitor::CpuUsageMonitor(int cpu, const Glib::ustring &tag_string)
-  : Monitor(tag_string), cpu_no(cpu), total_time(0), nice_time(0), idle_time(0),
-    iowait_time(0)
+CpuUsageMonitor::CpuUsageMonitor(int cpu, const Glib::ustring &tag_string,
+                                 int interval)
+  : Monitor(tag_string, interval), cpu_no(cpu), total_time(0), nice_time(0),
+    idle_time(0), iowait_time(0)
 {
   if (cpu_no < 0 || cpu_no >= max_no_cpus)
     cpu_no = all_cpus;
@@ -427,11 +483,6 @@ Glib::ustring CpuUsageMonitor::get_short_name()
     return String::ucompose(_("CPU %1"), cpu_no + 1);
 }
 
-int CpuUsageMonitor::update_interval()
-{
-  return 1000;
-}
-
 void CpuUsageMonitor::save(XfceRc *settings_w)
 {
   // Fetching assigned settings group
@@ -442,15 +493,27 @@ void CpuUsageMonitor::save(XfceRc *settings_w)
   xfce_rc_write_entry(settings_w, "type", "cpu_usage");
   xfce_rc_write_int_entry(settings_w, "cpu_no", cpu_no);
   xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
+}
+
+void CpuUsageMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
 }
 
+int CpuUsageMonitor::update_interval()
+{
+  return update_interval_priv;
+}
 
 //
 // class SwapUsageMonitor
 //
+// Static initialisation
+int const SwapUsageMonitor::update_interval_default = 10 * 1000;
 
-SwapUsageMonitor::SwapUsageMonitor(const Glib::ustring &tag_string)
-  : Monitor(tag_string), max_value(0)
+SwapUsageMonitor::SwapUsageMonitor(const Glib::ustring &tag_string, int interval)
+  : Monitor(tag_string, interval), max_value(0)
 {
 }
 
@@ -498,11 +561,6 @@ Glib::ustring SwapUsageMonitor::get_short_name()
   return _("Swap");
 }
 
-int SwapUsageMonitor::update_interval()
-{
-  return 10 * 1000;
-}
-
 void SwapUsageMonitor::save(XfceRc *settings_w)
 {
   // Fetching assigned settings group
@@ -512,15 +570,27 @@ void SwapUsageMonitor::save(XfceRc *settings_w)
   xfce_rc_set_group(settings_w, dir.c_str());
   xfce_rc_write_entry(settings_w, "type", "swap_usage");
   xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
 }
 
+void SwapUsageMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
+}
+
+int SwapUsageMonitor::update_interval()
+{
+  return update_interval_priv;
+}
 
 //
 // class LoadAverageMonitor
 //
+// Static initialisation
+int const LoadAverageMonitor::update_interval_default = 30 * 1000;
 
-LoadAverageMonitor::LoadAverageMonitor(const Glib::ustring &tag_string)
-  : Monitor(tag_string), max_value(1.0)
+LoadAverageMonitor::LoadAverageMonitor(const Glib::ustring &tag_string, int interval)
+  : Monitor(tag_string, interval), max_value(1.0)
 {
 }
 
@@ -573,11 +643,6 @@ Glib::ustring LoadAverageMonitor::get_short_name()
   return _("Load");
 }
 
-int LoadAverageMonitor::update_interval()
-{
-  return 30 * 1000;
-}
-
 void LoadAverageMonitor::save(XfceRc *settings_w)
 {
   // Fetching assigned settings group
@@ -587,19 +652,31 @@ void LoadAverageMonitor::save(XfceRc *settings_w)
   xfce_rc_set_group(settings_w, dir.c_str());
   xfce_rc_write_entry(settings_w, "type", "load_average");
   xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
 
   // No support for floats - stringifying
   Glib::ustring setting = String::ucompose("%1", max_value);
   xfce_rc_write_entry(settings_w, "max", setting.c_str());
 }
 
+void LoadAverageMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
+}
+
+int LoadAverageMonitor::update_interval()
+{
+  return update_interval_priv;
+}
 
 //
 // class MemoryUsageMonitor
 //
+// Static initialisation
+int const MemoryUsageMonitor::update_interval_default = 10 * 1000;
 
-MemoryUsageMonitor::MemoryUsageMonitor(const Glib::ustring &tag_string)
-  : Monitor(tag_string), max_value(0)
+MemoryUsageMonitor::MemoryUsageMonitor(const Glib::ustring &tag_string, int interval)
+  : Monitor(tag_string, interval), max_value(0)
 {
 }
 
@@ -647,11 +724,6 @@ Glib::ustring MemoryUsageMonitor::get_short_name()
   return _("Mem.");
 }
 
-int MemoryUsageMonitor::update_interval()
-{
-  return 10 * 1000;
-}
-
 void MemoryUsageMonitor::save(XfceRc *settings_w)
 {
   // Fetching assigned settings group
@@ -661,16 +733,28 @@ void MemoryUsageMonitor::save(XfceRc *settings_w)
   xfce_rc_set_group(settings_w, dir.c_str());
   xfce_rc_write_entry(settings_w, "type", "memory_usage");
   xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
+}
+
+void MemoryUsageMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
 }
 
+int MemoryUsageMonitor::update_interval()
+{
+  return update_interval_priv;
+}
 
 //
 // class DiskUsageMonitor
 //
+// Static initialisation
+int const DiskUsageMonitor::update_interval_default = 60 * 1000;
 
 DiskUsageMonitor::DiskUsageMonitor(const std::string &dir, bool free,
-                                   const Glib::ustring &tag_string)
-  : Monitor(tag_string), max_value(0), mount_dir(dir), show_free(free)
+                                   const Glib::ustring &tag_string, int interval)
+  : Monitor(tag_string, interval), max_value(0), mount_dir(dir), show_free(free)
 {
 }
 
@@ -741,11 +825,6 @@ Glib::ustring DiskUsageMonitor::get_short_name()
   return String::ucompose("%1", mount_dir);
 }
 
-int DiskUsageMonitor::update_interval()
-{
-  return 60 * 1000;
-}
-
 void DiskUsageMonitor::save(XfceRc *settings_w)
 {
   // Fetching assigned settings group
@@ -757,6 +836,17 @@ void DiskUsageMonitor::save(XfceRc *settings_w)
   xfce_rc_write_entry(settings_w, "mount_dir", mount_dir.c_str());
   xfce_rc_write_bool_entry(settings_w, "show_free", show_free);
   xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
+}
+
+void DiskUsageMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
+}
+
+int DiskUsageMonitor::update_interval()
+{
+  return update_interval_priv;
 }
 
 //
@@ -764,16 +854,52 @@ void DiskUsageMonitor::save(XfceRc *settings_w)
 //
 // Static initialisation
 const Glib::ustring& DiskStatsMonitor::diskstats_path = "/proc/diskstats";
+int const DiskStatsMonitor::update_interval_default = 1000;
 
 // No stats allow for negative values, so using that to detect no previous value
 DiskStatsMonitor::DiskStatsMonitor(const Glib::ustring &device_name,
                                    const Stat &stat_to_monitor,
-                                   const Glib::ustring &tag_string)
-  : Monitor(tag_string), device_name(device_name),
+                                   const Glib::ustring &tag_string,
+                                   int interval)
+  : Monitor(tag_string, interval), device_name(device_name),
     stat_to_monitor(stat_to_monitor), previous_value(-1), max_value(1)
 {
 }
 
+bool DiskStatsMonitor::convert_to_rate()
+{
+  switch (stat_to_monitor)
+  {
+    /* Stats that don't need to be returned as a rate of change (per second
+     * currently) */
+    case num_ios_in_progress:
+      return false;
+
+    // Stats that need to be diffed to make a rate of change
+    default:
+      return true;
+  }
+
+}
+
+std::vector<Glib::ustring> DiskStatsMonitor::current_device_names()
+{
+  // Fetching current disk stats
+  std::map<Glib::ustring, std::vector<unsigned long int> > parsed_stats =
+      parse_disk_stats();
+
+  // Generating sorted list of available devices
+  std::vector<Glib::ustring> devices_list;
+  for (std::map<Glib::ustring, std::vector<unsigned long int> >::iterator it
+       = parsed_stats.begin(); it != parsed_stats.end(); ++it)
+  {
+    devices_list.push_back(it->first);
+  }
+  std::sort(devices_list.begin(), devices_list.end());
+
+  return devices_list;
+}
+
 double DiskStatsMonitor::do_measure()
 {
   // Making sure stats file is available
@@ -841,11 +967,6 @@ double DiskStatsMonitor::do_measure()
   return val;
 }
 
-double DiskStatsMonitor::max()
-{
-  return max_value;
-}
-
 bool DiskStatsMonitor::fixed_max()
 {
   return false;
@@ -868,23 +989,9 @@ Glib::ustring DiskStatsMonitor::get_short_name()
   return device_name + "-" + stat_to_string(stat_to_monitor, true);
 }
 
-int DiskStatsMonitor::update_interval()
-{
-  return 1000;
-}
-
-void DiskStatsMonitor::save(XfceRc *settings_w)
+double DiskStatsMonitor::max()
 {
-  // Fetching assigned settings group
-  Glib::ustring dir = get_settings_dir();
-
-  // Saving settings
-  xfce_rc_set_group(settings_w, dir.c_str());
-  xfce_rc_write_entry(settings_w, "type", "disk_statistics");
-  xfce_rc_write_entry(settings_w, "disk_stats_device", device_name.c_str());
-  xfce_rc_write_int_entry(settings_w, "disk_stats_stat", int(stat_to_monitor));
-  xfce_rc_write_int_entry(settings_w, "max", int(max_value));
-  xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  return max_value;
 }
 
 std::map<Glib::ustring, std::vector<unsigned long int> >
@@ -976,22 +1083,24 @@ DiskStatsMonitor::parse_disk_stats()
   return parsed_stats;
 }
 
-std::vector<Glib::ustring> DiskStatsMonitor::current_device_names()
+void DiskStatsMonitor::save(XfceRc *settings_w)
 {
-  // Fetching current disk stats
-  std::map<Glib::ustring, std::vector<unsigned long int> > parsed_stats =
-      parse_disk_stats();
+  // Fetching assigned settings group
+  Glib::ustring dir = get_settings_dir();
 
-  // Generating sorted list of available devices
-  std::vector<Glib::ustring> devices_list;
-  for (std::map<Glib::ustring, std::vector<unsigned long int> >::iterator it
-       = parsed_stats.begin(); it != parsed_stats.end(); ++it)
-  {
-    devices_list.push_back(it->first);
-  }
-  std::sort(devices_list.begin(), devices_list.end());
+  // Saving settings
+  xfce_rc_set_group(settings_w, dir.c_str());
+  xfce_rc_write_entry(settings_w, "type", "disk_statistics");
+  xfce_rc_write_entry(settings_w, "disk_stats_device", device_name.c_str());
+  xfce_rc_write_int_entry(settings_w, "disk_stats_stat", int(stat_to_monitor));
+  xfce_rc_write_int_entry(settings_w, "max", int(max_value));
+  xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
+}
 
-  return devices_list;
+void DiskStatsMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
 }
 
 Glib::ustring DiskStatsMonitor::stat_to_string(const DiskStatsMonitor::Stat &stat,
@@ -1082,20 +1191,9 @@ Glib::ustring DiskStatsMonitor::stat_to_string(const DiskStatsMonitor::Stat &sta
   return stat_str;
 }
 
-bool DiskStatsMonitor::convert_to_rate()
+int DiskStatsMonitor::update_interval()
 {
-  switch (stat_to_monitor)
-  {
-    /* Stats that don't need to be returned as a rate of change (per second
-     * currently) */
-    case num_ios_in_progress:
-      return false;
-
-    // Stats that need to be diffed to make a rate of change
-    default:
-      return true;
-  }
-
+  return update_interval_priv;
 }
 
 //
@@ -1106,6 +1204,7 @@ bool DiskStatsMonitor::convert_to_rate()
  * non-declaration statements here either, so can't directly populate the
  * defaults vector... the main type names vector isn't initialised here as the
  * associated function loads and saves settings */
+int const NetworkLoadMonitor::update_interval_default = 1000;
 std::vector<Glib::ustring> NetworkLoadMonitor::interface_type_names = std::vector<Glib::ustring>(NUM_INTERFACE_TYPES);
 std::vector<Glib::ustring> NetworkLoadMonitor::interface_type_names_default = initialise_default_interface_names();
 
@@ -1113,241 +1212,73 @@ bool NetworkLoadMonitor::interface_names_configured = false;
 
 NetworkLoadMonitor::NetworkLoadMonitor(InterfaceType &inter_type, Direction dir,
                                        const Glib::ustring &tag_string,
-                                       XfcePanelPlugin* xfce_plugin)
-  : Monitor(tag_string), max_value(1), byte_count(0), time_stamp_secs(0),
-    time_stamp_usecs(0),interface_type(inter_type), direction(dir),
-    xfce_plugin(xfce_plugin)
+                                       int interval, XfcePanelPlugin* xfce_plugin)
+  : Monitor(tag_string, interval), max_value(1), byte_count(0),
+    time_stamp_secs(0), time_stamp_usecs(0),interface_type(inter_type),
+    direction(dir), xfce_plugin(xfce_plugin)
 {
 }
 
-double NetworkLoadMonitor::do_measure()
+void NetworkLoadMonitor::configure_interface_names(XfcePanelPlugin *xfce_plugin)
 {
-  glibtop_netload netload;
-
-  /* Obtaining interface name - this can change after monitor is instantiated
-   * hence fetching each time */
-  Glib::ustring interface = get_interface_name(interface_type, xfce_plugin);
+  if (interface_names_configured)
+    return;
 
-  glibtop_get_netload(&netload, interface.c_str());
-  guint64 val, measured_bytes;
+  bool write_settings_ethernet_first = false, write_settings_ethernet_second = false,
+      write_settings_ethernet_third = false, write_settings_modem = false,
+      write_settings_serial_link = false, write_settings_wireless_first = false,
+      write_settings_wireless_second = false, write_settings_wireless_third = false;
 
-  if (direction == all_data)
-    measured_bytes = netload.bytes_total;
-  else if (direction == incoming_data)
-    measured_bytes = netload.bytes_in;
-  else
-    measured_bytes = netload.bytes_out;
+  gchar* file = xfce_panel_plugin_lookup_rc_file(xfce_plugin);
+  if (file)
+  {
+    XfceRc* settings_ro = xfce_rc_simple_open(file, true);
+    g_free(file);
 
-  if (byte_count == 0) // No estimate initially
-    val = 0;
-  else if (measured_bytes < byte_count) // Interface was reset
-    val = 0;
-  else
-    val = measured_bytes - byte_count;
+    // Ensuring default group is in focus
+    xfce_rc_set_group(settings_ro, NULL);
 
-  byte_count = measured_bytes;
+    Glib::ustring setting_name = String::ucompose(
+          "network_type_%1_interface_name",
+          int(ethernet_first));
+    if (xfce_rc_has_entry(settings_ro, setting_name.c_str()))
+      interface_type_names[ethernet_first] = xfce_rc_read_entry(
+            settings_ro, setting_name.c_str(),
+            get_default_interface_name(ethernet_first).c_str());
+    else
+    {
+      interface_type_names[ethernet_first] =
+          get_default_interface_name(ethernet_first);
+      write_settings_ethernet_first = true;
+    }
 
-  /* Note - max_value is no longer used to determine the graph max for
-   * Curves - the actual maxima stored in the ValueHistories are used */
-  if (val != 0)     // Reduce scale gradually
-    max_value = guint64(max_value * max_decay);
+    setting_name = String::ucompose(
+          "network_type_%1_interface_name",
+          int(ethernet_second));
+    if (xfce_rc_has_entry(settings_ro, setting_name.c_str()))
+      interface_type_names[ethernet_second] = xfce_rc_read_entry(
+            settings_ro, setting_name.c_str(),
+            get_default_interface_name(ethernet_second).c_str());
+    else
+    {
+      interface_type_names[ethernet_second] =
+          get_default_interface_name(ethernet_second);
+      write_settings_ethernet_second = true;
+    }
 
-  if (val > max_value)
-    max_value = guint64(val * 1.05);
-
-  for (nlm_seq::iterator i = sync_monitors.begin(), end = sync_monitors.end();
-       i != end; ++i) {
-    NetworkLoadMonitor &other = **i;
-    if (other.max_value > max_value)
-      max_value = other.max_value;
-    else if (max_value > other.max_value)
-      other.max_value = max_value;
-  }
-
-  // calculate difference in msecs
-  struct timeval tv;
-  if (gettimeofday(&tv, 0) == 0) {
-    time_difference =
-      (tv.tv_sec - time_stamp_secs) * 1000 +
-      (tv.tv_usec - time_stamp_usecs) / 1000;
-    time_stamp_secs = tv.tv_sec;
-    time_stamp_usecs = tv.tv_usec;
-  }
-
-  // Debug code
-  /*std::cout << "NetworkLoadMonitor::do_measure: val: " << val <<
-    ", max_value: " << max_value << "\n";*/
-
-  return val;
-}
-
-double NetworkLoadMonitor::max()
-{
-  return max_value;
-}
-
-bool NetworkLoadMonitor::fixed_max()
-{
-  return false;
-}
-
-Glib::ustring NetworkLoadMonitor::format_value(double val, bool compact)
-{
-  Glib::ustring format;
-
-  // 1000 ms = 1 s
-  val = val / time_difference * 1000;
-
-  if (val <= 0)     // fix weird problem with negative values
-    val = 0;
-
-  if (val >= 1024 * 1024 * 1024) {
-    val /= 1024 * 1024 * 1024;
-    format = compact ? _("%1G") : _("%1 GB/s");
-    return String::ucompose(format, decimal_digits(val, 3), val);
-  }
-  else if (val >= 1024 * 1024) {
-    val /= 1024 * 1024;
-    format = compact ? _("%1M") : _("%1 MB/s");
-    return String::ucompose(format, decimal_digits(val, 3), val);
-  }
-  else if (val >= 1024) {
-    val /= 1024;
-    format = compact ? _("%1K") : _("%1 KB/s");
-    return String::ucompose(format, decimal_digits(val, 3), val);
-  }
-  else
-  {
-    format = compact ? _("%1B") : _("%1 B/s");
-    return String::ucompose(format, decimal_digits(val, 3), val);
-  }
-}
-
-Glib::ustring NetworkLoadMonitor::get_name()
-{
-  Glib::ustring str = interface_type_to_string(interface_type, false);
-
-  if (direction == incoming_data)
-    // %1 is the network connection, e.g. "Ethernet (first)", in signifies
-    // that this is incoming data
-    str = String::ucompose(_("%1, in"), str);
-  else if (direction == outgoing_data)
-    // %1 is the network connection, e.g. "Ethernet (first)", out signifies
-    // that this is outgoing data
-    str = String::ucompose(_("%1, out"), str);
-
-  return str;
-}
-
-Glib::ustring NetworkLoadMonitor::get_short_name()
-{
-  // Have not merged this with get_name in order to keep the interface the same
-  Glib::ustring str = interface_type_to_string(interface_type, true);
-
-  if (direction == incoming_data)
-    str = String::ucompose(_("%1, in"), str);
-  else if (direction == outgoing_data)
-    str = String::ucompose(_("%1, out"), str);
-
-  return str;
-}
-
-int NetworkLoadMonitor::update_interval()
-{
-  return 1000;
-}
-
-void NetworkLoadMonitor::save(XfceRc *settings_w)
-{
-  // Fetching assigned settings group
-  Glib::ustring dir = get_settings_dir();
-
-  // Saving settings
-  xfce_rc_set_group(settings_w, dir.c_str());
-  xfce_rc_write_entry(settings_w, "type", "network_load");
-  xfce_rc_write_int_entry(settings_w, "interface_type", int(interface_type));
-  xfce_rc_write_int_entry(settings_w, "interface_direction",
-    int(direction));
-  xfce_rc_write_int_entry(settings_w, "max", int(max_value));
-  xfce_rc_write_entry(settings_w, "tag", tag.c_str());
-}
-
-void NetworkLoadMonitor::possibly_add_sync_with(Monitor *other)
-{
-  if (NetworkLoadMonitor *o = dynamic_cast<NetworkLoadMonitor *>(other))
-    if (interface_type == o->interface_type && direction != o->direction)
-      sync_monitors.push_back(o);
-}
-
-void NetworkLoadMonitor::remove_sync_with(Monitor *other)
-{
-  nlm_seq::iterator i
-    = std::find(sync_monitors.begin(), sync_monitors.end(), other);
-
-  if (i != sync_monitors.end())
-    sync_monitors.erase(i);
-}
-
-void NetworkLoadMonitor::configure_interface_names(XfcePanelPlugin *xfce_plugin)
-{
-  if (interface_names_configured)
-    return;
-
-  bool write_settings_ethernet_first = false, write_settings_ethernet_second = false,
-      write_settings_ethernet_third = false, write_settings_modem = false,
-      write_settings_serial_link = false, write_settings_wireless_first = false,
-      write_settings_wireless_second = false, write_settings_wireless_third = false;
-
-  gchar* file = xfce_panel_plugin_lookup_rc_file(xfce_plugin);
-  if (file)
-  {
-    XfceRc* settings_ro = xfce_rc_simple_open(file, true);
-    g_free(file);
-
-    // Ensuring default group is in focus
-    xfce_rc_set_group(settings_ro, NULL);
-
-    Glib::ustring setting_name = String::ucompose(
-          "network_type_%1_interface_name",
-          int(ethernet_first));
-    if (xfce_rc_has_entry(settings_ro, setting_name.c_str()))
-      interface_type_names[ethernet_first] = xfce_rc_read_entry(
-            settings_ro, setting_name.c_str(),
-            get_default_interface_name(ethernet_first).c_str());
-    else
-    {
-      interface_type_names[ethernet_first] =
-          get_default_interface_name(ethernet_first);
-      write_settings_ethernet_first = true;
-    }
-
-    setting_name = String::ucompose(
-          "network_type_%1_interface_name",
-          int(ethernet_second));
-    if (xfce_rc_has_entry(settings_ro, setting_name.c_str()))
-      interface_type_names[ethernet_second] = xfce_rc_read_entry(
-            settings_ro, setting_name.c_str(),
-            get_default_interface_name(ethernet_second).c_str());
-    else
-    {
-      interface_type_names[ethernet_second] =
-          get_default_interface_name(ethernet_second);
-      write_settings_ethernet_second = true;
-    }
-
-    setting_name = String::ucompose(
-          "network_type_%1_interface_name",
-          int(ethernet_third));
-    if (xfce_rc_has_entry(settings_ro, setting_name.c_str()))
-      interface_type_names[ethernet_third] = xfce_rc_read_entry(
-            settings_ro, setting_name.c_str(),
-            get_default_interface_name(ethernet_third).c_str());
-    else
-    {
-      interface_type_names[ethernet_third] =
-          get_default_interface_name(ethernet_third);
-      write_settings_ethernet_third = true;
-    }
+    setting_name = String::ucompose(
+          "network_type_%1_interface_name",
+          int(ethernet_third));
+    if (xfce_rc_has_entry(settings_ro, setting_name.c_str()))
+      interface_type_names[ethernet_third] = xfce_rc_read_entry(
+            settings_ro, setting_name.c_str(),
+            get_default_interface_name(ethernet_third).c_str());
+    else
+    {
+      interface_type_names[ethernet_third] =
+          get_default_interface_name(ethernet_third);
+      write_settings_ethernet_third = true;
+    }
 
     setting_name = String::ucompose(
           "network_type_%1_interface_name", int(modem));
@@ -1513,6 +1444,131 @@ void NetworkLoadMonitor::configure_interface_names(XfcePanelPlugin *xfce_plugin)
   interface_names_configured = true;
 }
 
+const Glib::ustring NetworkLoadMonitor::direction_to_string(const Direction direction)
+{
+  Glib::ustring direction_str;
+
+  switch(direction)
+  {
+    case all_data:
+      direction_str = _("All data");
+      break;
+
+    case incoming_data:
+      direction_str = _("Incoming data");
+      break;
+
+    case outgoing_data:
+      direction_str = _("Outgoing data");
+      break;
+  }
+
+  return direction_str;
+}
+
+double NetworkLoadMonitor::do_measure()
+{
+  glibtop_netload netload;
+
+  /* Obtaining interface name - this can change after monitor is instantiated
+   * hence fetching each time */
+  Glib::ustring interface = get_interface_name(interface_type, xfce_plugin);
+
+  glibtop_get_netload(&netload, interface.c_str());
+  guint64 val, measured_bytes;
+
+  if (direction == all_data)
+    measured_bytes = netload.bytes_total;
+  else if (direction == incoming_data)
+    measured_bytes = netload.bytes_in;
+  else
+    measured_bytes = netload.bytes_out;
+
+  if (byte_count == 0) // No estimate initially
+    val = 0;
+  else if (measured_bytes < byte_count) // Interface was reset
+    val = 0;
+  else
+    val = measured_bytes - byte_count;
+
+  byte_count = measured_bytes;
+
+  /* Note - max_value is no longer used to determine the graph max for
+   * Curves - the actual maxima stored in the ValueHistories are used */
+  if (val != 0)     // Reduce scale gradually
+    max_value = guint64(max_value * max_decay);
+
+  if (val > max_value)
+    max_value = guint64(val * 1.05);
+
+  for (nlm_seq::iterator i = sync_monitors.begin(), end = sync_monitors.end();
+       i != end; ++i) {
+    NetworkLoadMonitor &other = **i;
+    if (other.max_value > max_value)
+      max_value = other.max_value;
+    else if (max_value > other.max_value)
+      other.max_value = max_value;
+  }
+
+  // calculate difference in msecs
+  struct timeval tv;
+  if (gettimeofday(&tv, 0) == 0) {
+    time_difference =
+      (tv.tv_sec - time_stamp_secs) * 1000 +
+      (tv.tv_usec - time_stamp_usecs) / 1000;
+    time_stamp_secs = tv.tv_sec;
+    time_stamp_usecs = tv.tv_usec;
+  }
+
+  // Debug code
+  /*std::cout << "NetworkLoadMonitor::do_measure: val: " << val <<
+    ", max_value: " << max_value << "\n";*/
+
+  return val;
+}
+
+bool NetworkLoadMonitor::fixed_max()
+{
+  return false;
+}
+
+Glib::ustring NetworkLoadMonitor::format_value(double val, bool compact)
+{
+  Glib::ustring format;
+
+  // 1000 ms = 1 s
+  val = val / time_difference * 1000;
+
+  if (val <= 0)     // fix weird problem with negative values
+    val = 0;
+
+  if (val >= 1024 * 1024 * 1024) {
+    val /= 1024 * 1024 * 1024;
+    format = compact ? _("%1G") : _("%1 GB/s");
+    return String::ucompose(format, decimal_digits(val, 3), val);
+  }
+  else if (val >= 1024 * 1024) {
+    val /= 1024 * 1024;
+    format = compact ? _("%1M") : _("%1 MB/s");
+    return String::ucompose(format, decimal_digits(val, 3), val);
+  }
+  else if (val >= 1024) {
+    val /= 1024;
+    format = compact ? _("%1K") : _("%1 KB/s");
+    return String::ucompose(format, decimal_digits(val, 3), val);
+  }
+  else
+  {
+    format = compact ? _("%1B") : _("%1 B/s");
+    return String::ucompose(format, decimal_digits(val, 3), val);
+  }
+}
+
+Glib::ustring NetworkLoadMonitor::get_default_interface_name(InterfaceType type)
+{
+  return interface_type_names_default[type];
+}
+
 Glib::ustring NetworkLoadMonitor::get_interface_name(InterfaceType type,
                                                      XfcePanelPlugin *xfce_plugin)
 {
@@ -1528,14 +1584,33 @@ Glib::ustring NetworkLoadMonitor::get_interface_name(InterfaceType type,
   return interface_type_names[type];
 }
 
-Glib::ustring NetworkLoadMonitor::get_default_interface_name(InterfaceType type)
+Glib::ustring NetworkLoadMonitor::get_name()
 {
-  return interface_type_names_default[type];
+  Glib::ustring str = interface_type_to_string(interface_type, false);
+
+  if (direction == incoming_data)
+    // %1 is the network connection, e.g. "Ethernet (first)", in signifies
+    // that this is incoming data
+    str = String::ucompose(_("%1, in"), str);
+  else if (direction == outgoing_data)
+    // %1 is the network connection, e.g. "Ethernet (first)", out signifies
+    // that this is outgoing data
+    str = String::ucompose(_("%1, out"), str);
+
+  return str;
 }
 
-void NetworkLoadMonitor::set_interface_name(InterfaceType type, const Glib::ustring interface_name)
+Glib::ustring NetworkLoadMonitor::get_short_name()
 {
-  interface_type_names[type] = interface_name;
+  // Have not merged this with get_name in order to keep the interface the same
+  Glib::ustring str = interface_type_to_string(interface_type, true);
+
+  if (direction == incoming_data)
+    str = String::ucompose(_("%1, in"), str);
+  else if (direction == outgoing_data)
+    str = String::ucompose(_("%1, out"), str);
+
+  return str;
 }
 
 std::vector<Glib::ustring> NetworkLoadMonitor::initialise_default_interface_names()
@@ -1553,10 +1628,30 @@ std::vector<Glib::ustring> NetworkLoadMonitor::initialise_default_interface_name
   return inter_type_names_default;
 }
 
-void NetworkLoadMonitor::restore_default_interface_names(XfceRc *settings_w)
+bool NetworkLoadMonitor::interface_exists(const Glib::ustring &interface_name)
 {
-  interface_type_names = initialise_default_interface_names();
-  NetworkLoadMonitor::save_interfaces(settings_w);
+  glibtop_netlist buf;
+  char **devices;
+  int i;
+  bool found_device = false;
+
+  // Attempting to locate specified network interface
+  devices = glibtop_get_netlist(&buf);
+  for(i = 0; i < buf.number; ++i)
+  {
+    // Debug code
+    /*std::cout << "Device to search for: " << interface_name << ", device "
+                 "compared with: " << devices[i] << "\n";*/
+
+    if (interface_name == devices[i])
+    {
+      found_device = true;
+      break;
+    }
+  }
+  g_strfreev(devices);
+
+  return found_device;
 }
 
 const Glib::ustring NetworkLoadMonitor::interface_type_to_string(const InterfaceType type, const bool short_ver)
@@ -1626,30 +1721,47 @@ const Glib::ustring NetworkLoadMonitor::interface_type_to_string(const Interface
 
 }
 
-bool NetworkLoadMonitor::interface_exists(const Glib::ustring &interface_name)
+double NetworkLoadMonitor::max()
 {
-  glibtop_netlist buf;
-  char **devices;
-  int i;
-  bool found_device = false;
+  return max_value;
+}
 
-  // Attempting to locate specified network interface
-  devices = glibtop_get_netlist(&buf);
-  for(i = 0; i < buf.number; ++i)
-  {
-    // Debug code
-    /*std::cout << "Device to search for: " << interface_name << ", device "
-                 "compared with: " << devices[i] << "\n";*/
+void NetworkLoadMonitor::possibly_add_sync_with(Monitor *other)
+{
+  if (NetworkLoadMonitor *o = dynamic_cast<NetworkLoadMonitor *>(other))
+    if (interface_type == o->interface_type && direction != o->direction)
+      sync_monitors.push_back(o);
+}
 
-    if (interface_name == devices[i])
-    {
-      found_device = true;
-      break;
-    }
-  }
-  g_strfreev(devices);
+void NetworkLoadMonitor::restore_default_interface_names(XfceRc *settings_w)
+{
+  interface_type_names = initialise_default_interface_names();
+  NetworkLoadMonitor::save_interfaces(settings_w);
+}
 
-  return found_device;
+void NetworkLoadMonitor::remove_sync_with(Monitor *other)
+{
+  nlm_seq::iterator i
+    = std::find(sync_monitors.begin(), sync_monitors.end(), other);
+
+  if (i != sync_monitors.end())
+    sync_monitors.erase(i);
+}
+
+void NetworkLoadMonitor::save(XfceRc *settings_w)
+{
+  // Fetching assigned settings group
+  Glib::ustring dir = get_settings_dir();
+
+  // Saving settings
+  xfce_rc_set_group(settings_w, dir.c_str());
+  xfce_rc_write_entry(settings_w, "type", "network_load");
+  xfce_rc_write_int_entry(settings_w, "interface_type", int(interface_type));
+  xfce_rc_write_int_entry(settings_w, "interface_direction",
+    int(direction));
+  xfce_rc_write_int_entry(settings_w, "max", int(max_value));
+  xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
 }
 
 void NetworkLoadMonitor::save_interfaces(XfceRc *settings_w)
@@ -1692,26 +1804,19 @@ void NetworkLoadMonitor::save_interfaces(XfceRc *settings_w)
                       interface_type_names[wireless_third].c_str());
 }
 
-const Glib::ustring NetworkLoadMonitor::direction_to_string(const Direction direction)
+void NetworkLoadMonitor::set_interface_name(InterfaceType type, const Glib::ustring interface_name)
 {
-  Glib::ustring direction_str;
-
-  switch(direction)
-  {
-    case all_data:
-      direction_str = _("All data");
-      break;
-
-    case incoming_data:
-      direction_str = _("Incoming data");
-      break;
+  interface_type_names[type] = interface_name;
+}
 
-    case outgoing_data:
-      direction_str = _("Outgoing data");
-      break;
-  }
+void NetworkLoadMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
+}
 
-  return direction_str;
+int NetworkLoadMonitor::update_interval()
+{
+  return update_interval_priv;
 }
 
 //
@@ -1831,11 +1936,14 @@ double Sensors::get_value(int chip_no, int feature_no)
 //
 // class TemperatureMonitor
 //
-
+// Static initialisation
 double const Sensors::invalid_max = -1000000;
 
-TemperatureMonitor::TemperatureMonitor(int no, const Glib::ustring &tag_string)
-  : Monitor(tag_string), sensors_no(no)
+int const TemperatureMonitor::update_interval_default = 20 * 1000;
+
+TemperatureMonitor::TemperatureMonitor(int no, const Glib::ustring &tag_string,
+                                       int interval)
+  : Monitor(tag_string, interval), sensors_no(no)
 {
   Sensors::FeatureInfo info
     = Sensors::instance().get_temperature_features()[sensors_no];
@@ -1859,11 +1967,6 @@ double TemperatureMonitor::do_measure()
   return val;
 }
 
-double TemperatureMonitor::max()
-{
-  return max_value;
-}
-
 bool TemperatureMonitor::fixed_max()
 {
   return false;
@@ -1892,9 +1995,9 @@ Glib::ustring TemperatureMonitor::get_short_name()
   return String::ucompose(_("Temp. %1"), sensors_no + 1);
 }
 
-int TemperatureMonitor::update_interval()
+double TemperatureMonitor::max()
 {
-  return 20 * 1000;
+  return max_value;
 }
 
 void TemperatureMonitor::save(XfceRc *settings_w)
@@ -1907,19 +2010,32 @@ void TemperatureMonitor::save(XfceRc *settings_w)
   xfce_rc_write_entry(settings_w, "type", "temperature");
   xfce_rc_write_int_entry(settings_w, "temperature_no", sensors_no);
   xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
 
   // No support for floats - stringifying
   Glib::ustring setting = String::ucompose("%1", max_value);
   xfce_rc_write_entry(settings_w, "max", setting.c_str());
 }
 
+void TemperatureMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
+}
+
+int TemperatureMonitor::update_interval()
+{
+  return update_interval_priv;
+}
 
 //
 // class FanSpeedMonitor
 //
+// Static initialisation
+int const FanSpeedMonitor::update_interval_default = 20 * 1000;
 
-FanSpeedMonitor::FanSpeedMonitor(int no, const Glib::ustring &tag_string)
-  : Monitor(tag_string), sensors_no(no)
+FanSpeedMonitor::FanSpeedMonitor(int no, const Glib::ustring &tag_string,
+                                 int interval)
+  : Monitor(tag_string, interval), sensors_no(no)
 {
   Sensors::FeatureInfo info
     = Sensors::instance().get_fan_features()[sensors_no];
@@ -1943,11 +2059,6 @@ double FanSpeedMonitor::do_measure()
   return val;
 }
 
-double FanSpeedMonitor::max()
-{
-  return max_value;
-}
-
 bool FanSpeedMonitor::fixed_max()
 {
   return false;
@@ -1974,9 +2085,9 @@ Glib::ustring FanSpeedMonitor::get_short_name()
   return String::ucompose(_("Fan %1"), sensors_no + 1);
 }
 
-int FanSpeedMonitor::update_interval()
+double FanSpeedMonitor::max()
 {
-  return 20 * 1000;
+  return max_value;
 }
 
 void FanSpeedMonitor::save(XfceRc *settings_w)
@@ -1989,16 +2100,28 @@ void FanSpeedMonitor::save(XfceRc *settings_w)
   xfce_rc_write_entry(settings_w, "type", "fan_speed");
   xfce_rc_write_int_entry(settings_w, "fan_no", sensors_no);
   xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
 
   // No support for floats - stringifying
   Glib::ustring setting = String::ucompose("%1", max_value);
   xfce_rc_write_entry(settings_w, "max", setting.c_str());
 }
 
+void FanSpeedMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
+}
+
+int FanSpeedMonitor::update_interval()
+{
+  return update_interval_priv;
+}
 
 //
 // class GenericMonitor
 //
+// Static initialisation
+int const GenericMonitor::update_interval_default = 1000;
 
 GenericMonitor::GenericMonitor(const Glib::ustring &file_path,
                                const bool value_from_contents,
@@ -2009,8 +2132,9 @@ GenericMonitor::GenericMonitor(const Glib::ustring &file_path,
                                const Glib::ustring &data_source_name_short,
                                const Glib::ustring &units_long,
                                const Glib::ustring &units_short,
-                               const Glib::ustring &tag_string)
-  : Monitor(tag_string), max_value(0),
+                               const Glib::ustring &tag_string,
+                               int interval)
+  : Monitor(tag_string, interval), max_value(0),
     previous_value(std::numeric_limits<double>::min()),
     file_path(file_path), value_from_contents(value_from_contents),
     follow_change(follow_change), dir(dir),
@@ -2154,11 +2278,6 @@ double GenericMonitor::do_measure()
   return return_value;
 }
 
-double GenericMonitor::max()
-{
-  return max_value;
-}
-
 bool GenericMonitor::fixed_max()
 {
   return false;
@@ -2181,9 +2300,9 @@ Glib::ustring GenericMonitor::get_short_name()
   return data_source_name_short;
 }
 
-int GenericMonitor::update_interval()
+double GenericMonitor::max()
 {
-  return 1000;
+  return max_value;
 }
 
 void GenericMonitor::save(XfceRc *settings_w)
@@ -2206,5 +2325,15 @@ void GenericMonitor::save(XfceRc *settings_w)
   xfce_rc_write_entry(settings_w, "units_long", units_long.c_str());
   xfce_rc_write_entry(settings_w, "units_short", units_short.c_str());
   xfce_rc_write_entry(settings_w, "tag", tag.c_str());
+  xfce_rc_write_int_entry(settings_w, "update_interval", update_interval());
+}
+
+void GenericMonitor::set_update_interval(int interval)
+{
+  update_interval_priv = interval;
 }
 
+int GenericMonitor::update_interval()
+{
+  return update_interval_priv;
+}
diff --git a/src/monitor-impls.hpp b/src/monitor-impls.hpp
index e105506..3301cc8 100644
--- a/src/monitor-impls.hpp
+++ b/src/monitor-impls.hpp
@@ -48,20 +48,31 @@ extern "C"
 class CpuUsageMonitor: public Monitor
 {
 public:
-  CpuUsageMonitor(const Glib::ustring &tag_string);    // Monitor all CPUs
-  CpuUsageMonitor(int cpu_no, const Glib::ustring &tag_string);  // Monitor only
-                                                                 // CPU no.
+
+  // Monitor all CPUs
+  CpuUsageMonitor(const Glib::ustring &tag_string, int interval);
+
+  // Monitor only CPU no.
+  CpuUsageMonitor(int cpu_no, const Glib::ustring &tag_string, int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact = false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+
+  virtual int update_interval();
 
   static int const max_no_cpus;
 
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
+
+
 private:
   virtual double do_measure();
 
@@ -77,15 +88,21 @@ private:
 class SwapUsageMonitor: public Monitor
 {
 public:
-  SwapUsageMonitor(const Glib::ustring &tag_string);
+  SwapUsageMonitor(const Glib::ustring &tag_string, int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact = false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
 private:
   virtual double do_measure();
@@ -97,15 +114,21 @@ private:
 class LoadAverageMonitor: public Monitor
 {
 public:
-  LoadAverageMonitor(const Glib::ustring &tag_string);
+  LoadAverageMonitor(const Glib::ustring &tag_string, int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact = false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
 private:
   virtual double do_measure();
@@ -117,15 +140,21 @@ private:
 class MemoryUsageMonitor: public Monitor
 {
 public:
-  MemoryUsageMonitor(const Glib::ustring &tag_string);
+  MemoryUsageMonitor(const Glib::ustring &tag_string, int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact = false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
 private:
   virtual double do_measure();
@@ -138,15 +167,21 @@ class DiskUsageMonitor: public Monitor
 {
 public:
   DiskUsageMonitor(const std::string &mount_dir, bool show_free,
-                   const Glib::ustring &tag_string);
+                   const Glib::ustring &tag_string, int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact= false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
 private:
   virtual double do_measure();
@@ -179,15 +214,21 @@ public:
   };
 
   DiskStatsMonitor(const Glib::ustring &device_name, const Stat &stat_to_monitor,
-                   const Glib::ustring &tag_string);
+                   const Glib::ustring &tag_string, int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact=false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
   static std::vector<Glib::ustring> current_device_names();
   static Glib::ustring stat_to_string(
@@ -243,17 +284,23 @@ public:
 
   NetworkLoadMonitor(InterfaceType &interface_type,
                      Direction direction, const Glib::ustring &tag_string,
-                     XfcePanelPlugin *xfce_plugin);
+                     int interval, XfcePanelPlugin *xfce_plugin);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact = false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
-  virtual void save(XfceRc *settings_w);
   virtual void possibly_add_sync_with(Monitor *other);
   virtual void remove_sync_with(Monitor *other);
+  virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual function so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
   /* Allow to maintain list of interface names separate to individual monitor
    * objects
@@ -312,15 +359,21 @@ class TemperatureMonitor: public Monitor
 public:
 
   // no. in the temperature features
-  TemperatureMonitor(int no, const Glib::ustring &tag_string);
+  TemperatureMonitor(int no, const Glib::ustring &tag_string, int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact = false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
 private:
   virtual double do_measure();
@@ -336,15 +389,21 @@ class FanSpeedMonitor: public Monitor
 public:
 
   // no. in the fan features
-  FanSpeedMonitor(int no, const Glib::ustring &tag_string);
+  FanSpeedMonitor(int no, const Glib::ustring &tag_string, int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact = false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
 private:
   virtual double do_measure();
@@ -376,15 +435,22 @@ public:
                  const Glib::ustring &data_source_name_short,
                  const Glib::ustring &units_long,
                  const Glib::ustring &units_short,
-                 const Glib::ustring &tag_string);
+                 const Glib::ustring &tag_string,
+                 int interval);
 
   virtual double max();
   virtual bool fixed_max();
   virtual Glib::ustring format_value(double val, bool compact=false);
   virtual Glib::ustring get_name();
   virtual Glib::ustring get_short_name();
-  virtual int update_interval();
   virtual void save(XfceRc *settings_w);
+  virtual void set_update_interval(int interval);
+  virtual int update_interval();
+
+  /* The default interval between updates in milliseconds, for the monitor type
+   * - can't have a static virtual member so it is declared per class
+   *  implementation */
+  static int const update_interval_default;
 
 private:
   virtual double do_measure();
diff --git a/src/monitor.hpp b/src/monitor.hpp
index c953839..84935ee 100644
--- a/src/monitor.hpp
+++ b/src/monitor.hpp
@@ -35,8 +35,8 @@ extern "C"
 class Monitor: noncopyable
 {
 public:
-  Monitor(const Glib::ustring &tag_string)
-    : measured_value(0), tag(tag_string)
+  Monitor(const Glib::ustring &tag_string, int interval)
+    : measured_value(0), tag(tag_string), update_interval_priv(interval)
   {
   }
   
@@ -88,12 +88,16 @@ public:
   // Return a short name
   virtual Glib::ustring get_short_name() = 0;
 
-  // The interval between updates in milliseconds
+  /* The interval between updates in milliseconds, user configurable
+   * The default value is static per monitor implementation as you can't have
+   * static virtual members */
   virtual int update_interval() = 0;
 
   // Save information about the monitor
   virtual void save(XfceRc *settings_w) = 0;
 
+  virtual void set_update_interval(int interval) = 0;
+
   /* If other is watching the same thing as this monitor, it might be
    * a good idea to sync maxima with it */
   virtual void possibly_add_sync_with(Monitor *other)
@@ -107,6 +111,7 @@ public:
 
 protected:
   double measured_value;
+  int update_interval_priv;
 
 private:
 
diff --git a/src/ui.glade b/src/ui.glade
index 6b5f02c..f83169b 100644
--- a/src/ui.glade
+++ b/src/ui.glade
@@ -9,6 +9,76 @@
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="cpu_usage_refresh_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">1</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="disk_stats_refresh_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">1</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="disk_usage_refresh_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">60</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="fan_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">20</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="generic_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">1</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="load_average_refresh_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">30</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="memory_refresh_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">10</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="network_load_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">1</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="swap_refresh_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">10</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="temperature_delay_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">9999</property>
+    <property name="value">20</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkDialog" id="choose_monitor_window">
     <property name="can_focus">False</property>
     <property name="border_width">12</property>
@@ -188,40 +258,119 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="cpu_tag_hbox">
+                              <object class="GtkExpander" id="expander2">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="spacing">5</property>
                                 <child>
-                                  <object class="GtkLabel" id="cpu_usage_tag_label">
+                                  <object class="GtkTable" id="table1">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="label" translatable="yes">Tag:  </property>
+                                    <property name="n_rows">2</property>
+                                    <property name="n_columns">4</property>
+                                    <property name="column_spacing">5</property>
+                                    <property name="row_spacing">5</property>
+                                    <child>
+                                      <object class="GtkLabel" id="cpu_usage_tag_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Tag:  </property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="cpu_usage_tag_entry">
+                                        <property name="width_request">80</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+in the optional text overlay in a curve
+view</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="invisible_char_set">True</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="cpu_usage_refresh_delay_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes">Refresh every</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label10">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes"> seconds</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="right_attach">3</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="cpu_usage_refresh_delay_default_button">
+                                        <property name="label" translatable="yes">Reset</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">3</property>
+                                        <property name="right_attach">4</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="cpu_usage_refresh_delay_spinbutton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                        <property name="adjustment">cpu_usage_refresh_delay_adjustment</property>
+                                        <property name="climb_rate">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
                                 </child>
-                                <child>
-                                  <object class="GtkEntry" id="cpu_usage_tag_entry">
-                                    <property name="width_request">80</property>
+                                <child type="label">
+                                  <object class="GtkLabel" id="label2">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
-in the optional text overlay in a curve
-view</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Advanced</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
                                 </child>
                               </object>
                               <packing>
@@ -281,41 +430,120 @@ view</property>
                         <property name="can_focus">False</property>
                         <property name="spacing">18</property>
                         <child>
-                          <object class="GtkHBox" id="load_average_tag_vbox">
+                          <object class="GtkExpander" id="expander3">
                             <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="spacing">6</property>
+                            <property name="can_focus">True</property>
+                            <property name="spacing">5</property>
                             <child>
-                              <object class="GtkLabel" id="load_average_tag_label">
+                              <object class="GtkTable" id="table2">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">Tag:</property>
+                                <property name="n_rows">2</property>
+                                <property name="n_columns">4</property>
+                                <property name="column_spacing">5</property>
+                                <property name="row_spacing">5</property>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <object class="GtkLabel" id="load_average_tag_label">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Tag:</property>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkEntry" id="load_average_tag_entry">
+                                    <property name="width_request">80</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+in the optional text overlay in a curve
+view</property>
+                                    <property name="invisible_char">●</property>
+                                    <property name="invisible_char_set">True</property>
+                                    <property name="primary_icon_activatable">False</property>
+                                    <property name="secondary_icon_activatable">False</property>
+                                    <property name="primary_icon_sensitive">True</property>
+                                    <property name="secondary_icon_sensitive">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkLabel" id="load_average_refresh_delay_label">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Refresh every</property>
+                                  </object>
+                                  <packing>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkLabel" id="label11">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes"> seconds</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">2</property>
+                                    <property name="right_attach">3</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkButton" id="load_average_refresh_delay_default_button">
+                                    <property name="label" translatable="yes">Reset</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">3</property>
+                                    <property name="right_attach">4</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkSpinButton" id="load_average_refresh_delay_spinbutton">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                    <property name="invisible_char">●</property>
+                                    <property name="primary_icon_activatable">False</property>
+                                    <property name="secondary_icon_activatable">False</property>
+                                    <property name="primary_icon_sensitive">True</property>
+                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="adjustment">load_average_refresh_delay_adjustment</property>
+                                    <property name="climb_rate">1</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
+                                  </packing>
+                                </child>
                               </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">True</property>
-                                <property name="position">0</property>
-                              </packing>
                             </child>
-                            <child>
-                              <object class="GtkEntry" id="load_average_tag_entry">
-                                <property name="width_request">80</property>
+                            <child type="label">
+                              <object class="GtkLabel" id="label3">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
-in the optional text overlay in a curve
-view</property>
-                                <property name="invisible_char">●</property>
-                                <property name="primary_icon_activatable">False</property>
-                                <property name="secondary_icon_activatable">False</property>
-                                <property name="primary_icon_sensitive">True</property>
-                                <property name="secondary_icon_sensitive">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">Advanced</property>
                               </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">True</property>
-                                <property name="position">1</property>
-                              </packing>
                             </child>
                           </object>
                           <packing>
@@ -325,12 +553,9 @@ view</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
-                        <child>
-                          <placeholder/>
-                        </child>
                       </object>
                       <packing>
-                        <property name="expand">True</property>
+                        <property name="expand">False</property>
                         <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
@@ -449,43 +674,123 @@ view</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="disk_usage_tag_hbox">
+                              <object class="GtkExpander" id="expander4">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="spacing">5</property>
                                 <child>
-                                  <object class="GtkLabel" id="disk_usage_tag_label">
+                                  <object class="GtkTable" id="table3">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+                                    <property name="n_rows">2</property>
+                                    <property name="n_columns">4</property>
+                                    <property name="column_spacing">5</property>
+                                    <property name="row_spacing">5</property>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="disk_usage_tag_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
 in the optional text overlay in a curve
 view</property>
-                                    <property name="label" translatable="yes">Tag:  </property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Tag:  </property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="disk_usage_tag_entry">
+                                        <property name="width_request">80</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+in the optional text overlay in a curve
+view</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="invisible_char_set">True</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="disk_usage_refresh_delay_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Refresh every</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="disk_usage_refresh_delay_spinbutton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                        <property name="adjustment">disk_usage_refresh_delay_adjustment</property>
+                                        <property name="climb_rate">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label12">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes"> seconds</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="right_attach">3</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="disk_usage_refresh_delay_default_button">
+                                        <property name="label" translatable="yes">Reset</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">3</property>
+                                        <property name="right_attach">4</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
                                 </child>
-                                <child>
-                                  <object class="GtkEntry" id="disk_usage_tag_entry">
-                                    <property name="width_request">80</property>
+                                <child type="label">
+                                  <object class="GtkLabel" id="label4">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
-in the optional text overlay in a curve
-view</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Advanced</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
                                 </child>
                               </object>
                               <packing>
@@ -622,43 +927,123 @@ view</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="disk_stats_tag_hbox">
+                              <object class="GtkExpander" id="expander5">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="spacing">5</property>
                                 <child>
-                                  <object class="GtkLabel" id="disk_stats_tag_label">
+                                  <object class="GtkTable" id="table4">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+                                    <property name="n_rows">2</property>
+                                    <property name="n_columns">4</property>
+                                    <property name="column_spacing">5</property>
+                                    <property name="row_spacing">5</property>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="disk_stats_tag_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
 in the optional text overlay in a curve
 view</property>
-                                    <property name="label" translatable="yes">Tag:  </property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Tag:  </property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="disk_stats_tag_entry">
+                                        <property name="width_request">80</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+in the optional text overlay in a curve
+view</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="invisible_char_set">True</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="disk_stats_refresh_delay_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Refresh every</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="disk_stats_refresh_delay_spinbutton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                        <property name="adjustment">disk_stats_refresh_delay_adjustment</property>
+                                        <property name="climb_rate">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label13">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes"> seconds</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="right_attach">3</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="disk_stats_refresh_delay_default_button">
+                                        <property name="label" translatable="yes">Reset</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">3</property>
+                                        <property name="right_attach">4</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">0</property>
-                                  </packing>
                                 </child>
-                                <child>
-                                  <object class="GtkEntry" id="disk_stats_tag_entry">
-                                    <property name="width_request">80</property>
+                                <child type="label">
+                                  <object class="GtkLabel" id="label5">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
-in the optional text overlay in a curve
-view</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Advanced</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
                                 </child>
                               </object>
                               <packing>
@@ -667,9 +1052,6 @@ view</property>
                                 <property name="position">2</property>
                               </packing>
                             </child>
-                            <child>
-                              <placeholder/>
-                            </child>
                           </object>
                           <packing>
                             <property name="expand">True</property>
@@ -724,40 +1106,120 @@ view</property>
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <child>
-                              <object class="GtkHBox" id="swap_tag_hbox">
+                              <object class="GtkExpander" id="expander6">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="spacing">5</property>
                                 <child>
-                                  <object class="GtkLabel" id="swap_tag_label">
+                                  <object class="GtkTable" id="table5">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="label" translatable="yes">Tag:  </property>
+                                    <property name="n_rows">2</property>
+                                    <property name="n_columns">4</property>
+                                    <property name="column_spacing">5</property>
+                                    <property name="row_spacing">5</property>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="swap_tag_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Tag:  </property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="swap_tag_entry">
+                                        <property name="width_request">80</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+in the optional text overlay in a curve
+view</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="invisible_char_set">True</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="swap_refresh_delay_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Refresh every</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="swap_refresh_delay_spinbutton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                        <property name="adjustment">swap_refresh_delay_adjustment</property>
+                                        <property name="climb_rate">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label14">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes"> seconds</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="right_attach">3</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="swap_refresh_delay_default_button">
+                                        <property name="label" translatable="yes">Reset</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">3</property>
+                                        <property name="right_attach">4</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
                                 </child>
-                                <child>
-                                  <object class="GtkEntry" id="swap_tag_entry">
-                                    <property name="width_request">80</property>
+                                <child type="label">
+                                  <object class="GtkLabel" id="label6">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
-in the optional text overlay in a curve
-view</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Advanced</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
                                 </child>
                               </object>
                               <packing>
@@ -766,9 +1228,6 @@ view</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
-                            <child>
-                              <placeholder/>
-                            </child>
                           </object>
                           <packing>
                             <property name="expand">True</property>
@@ -777,9 +1236,6 @@ view</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
-                        <child>
-                          <placeholder/>
-                        </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -826,40 +1282,120 @@ view</property>
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <child>
-                              <object class="GtkHBox" id="memory_tag_hbox">
+                              <object class="GtkExpander" id="expander7">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="spacing">5</property>
                                 <child>
-                                  <object class="GtkLabel" id="memory_tag_label">
+                                  <object class="GtkTable" id="table6">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="label" translatable="yes">Tag:  </property>
+                                    <property name="n_rows">2</property>
+                                    <property name="n_columns">4</property>
+                                    <property name="column_spacing">5</property>
+                                    <property name="row_spacing">5</property>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="memory_tag_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Tag:  </property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="memory_tag_entry">
+                                        <property name="width_request">80</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+in the optional text overlay in a curve
+view</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="invisible_char_set">True</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="memory_refresh_delay_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Refresh every</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="memory_refresh_delay_spinbutton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                        <property name="adjustment">memory_refresh_delay_adjustment</property>
+                                        <property name="climb_rate">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label15">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes"> seconds</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="right_attach">3</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="memory_refresh_delay_default_button">
+                                        <property name="label" translatable="yes">Reset</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">3</property>
+                                        <property name="right_attach">4</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
                                 </child>
-                                <child>
-                                  <object class="GtkEntry" id="memory_tag_entry">
-                                    <property name="width_request">80</property>
+                                <child type="label">
+                                  <object class="GtkLabel" id="label7">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
-in the optional text overlay in a curve
-view</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Advanced</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
                                 </child>
                               </object>
                               <packing>
@@ -876,9 +1412,6 @@ view</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
-                        <child>
-                          <placeholder/>
-                        </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -943,91 +1476,254 @@ view</property>
                         <property name="sensitive">False</property>
                         <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkTable" id="network_load_options_table">
+                          <object class="GtkVBox" id="vbox1">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="n_rows">3</property>
-                            <property name="n_columns">2</property>
-                            <property name="column_spacing">12</property>
-                            <property name="row_spacing">6</property>
+                            <property name="spacing">5</property>
                             <child>
-                              <object class="GtkLabel" id="direction_label">
+                              <object class="GtkTable" id="network_load_options_table">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Direction:</property>
-                              </object>
-                              <packing>
-                                <property name="top_attach">1</property>
-                                <property name="bottom_attach">2</property>
-                                <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"/>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="network_type_label">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Connection:</property>
-                              </object>
-                              <packing>
-                                <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"/>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="network_load_tag_label">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Tag:</property>
+                                <property name="n_rows">2</property>
+                                <property name="n_columns">2</property>
+                                <property name="column_spacing">12</property>
+                                <property name="row_spacing">6</property>
+                                <child>
+                                  <object class="GtkLabel" id="direction_label">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Direction:</property>
+                                  </object>
+                                  <packing>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
+                                    <property name="x_options">GTK_FILL</property>
+                                    <property name="y_options"/>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkLabel" id="network_type_label">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Connection:</property>
+                                  </object>
+                                  <packing>
+                                    <property name="x_options">GTK_FILL</property>
+                                    <property name="y_options"/>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkComboBox" id="network_type_combobox">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkComboBox" id="network_direction_combobox">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
+                                  </packing>
+                                </child>
                               </object>
                               <packing>
-                                <property name="top_attach">2</property>
-                                <property name="bottom_attach">3</property>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkEntry" id="network_load_tag_entry">
+                              <object class="GtkExpander" id="expander1">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+                                <child>
+                                  <object class="GtkAlignment" id="alignment1">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="left_padding">17</property>
+                                    <child>
+                                      <object class="GtkVBox" id="network_vbox2">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="spacing">5</property>
+                                        <child>
+                                          <object class="GtkTable" id="table7">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="n_rows">2</property>
+                                            <property name="n_columns">4</property>
+                                            <property name="column_spacing">5</property>
+                                            <property name="row_spacing">5</property>
+                                            <child>
+                                              <placeholder/>
+                                            </child>
+                                            <child>
+                                              <placeholder/>
+                                            </child>
+                                            <child>
+                                              <object class="GtkLabel" id="network_load_tag_label">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="xalign">0</property>
+                                                <property name="label" translatable="yes">Tag:  </property>
+                                              </object>
+                                            </child>
+                                            <child>
+                                              <object class="GtkEntry" id="network_load_tag_entry">
+                                                <property name="width_request">80</property>
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
 in the optional text overlay in a curve
 view</property>
-                                <property name="invisible_char">●</property>
-                                <property name="primary_icon_activatable">False</property>
-                                <property name="secondary_icon_activatable">False</property>
-                                <property name="primary_icon_sensitive">True</property>
-                                <property name="secondary_icon_sensitive">True</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="right_attach">2</property>
-                                <property name="top_attach">2</property>
-                                <property name="bottom_attach">3</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkComboBox" id="network_type_combobox">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="right_attach">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkComboBox" id="network_direction_combobox">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                                <property name="invisible_char">●</property>
+                                                <property name="invisible_char_set">True</property>
+                                                <property name="primary_icon_activatable">False</property>
+                                                <property name="secondary_icon_activatable">False</property>
+                                                <property name="primary_icon_sensitive">True</property>
+                                                <property name="secondary_icon_sensitive">True</property>
+                                              </object>
+                                              <packing>
+                                                <property name="left_attach">1</property>
+                                                <property name="right_attach">2</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <object class="GtkLabel" id="network_load_refresh_delay_label">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="xalign">0</property>
+                                                <property name="label" translatable="yes">Refresh every</property>
+                                              </object>
+                                              <packing>
+                                                <property name="top_attach">1</property>
+                                                <property name="bottom_attach">2</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <object class="GtkSpinButton" id="network_load_refresh_delay_spinbutton">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                                <property name="invisible_char">●</property>
+                                                <property name="primary_icon_activatable">False</property>
+                                                <property name="secondary_icon_activatable">False</property>
+                                                <property name="primary_icon_sensitive">True</property>
+                                                <property name="secondary_icon_sensitive">True</property>
+                                                <property name="adjustment">network_load_delay_adjustment</property>
+                                                <property name="climb_rate">1</property>
+                                              </object>
+                                              <packing>
+                                                <property name="left_attach">1</property>
+                                                <property name="right_attach">2</property>
+                                                <property name="top_attach">1</property>
+                                                <property name="bottom_attach">2</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <object class="GtkLabel" id="label16">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="label" translatable="yes"> seconds</property>
+                                              </object>
+                                              <packing>
+                                                <property name="left_attach">2</property>
+                                                <property name="right_attach">3</property>
+                                                <property name="top_attach">1</property>
+                                                <property name="bottom_attach">2</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <object class="GtkButton" id="network_load_refresh_delay_default_button">
+                                                <property name="label" translatable="yes">Reset</property>
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="receives_default">True</property>
+                                              </object>
+                                              <packing>
+                                                <property name="left_attach">3</property>
+                                                <property name="right_attach">4</property>
+                                                <property name="top_attach">1</property>
+                                                <property name="bottom_attach">2</property>
+                                              </packing>
+                                            </child>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">True</property>
+                                            <property name="fill">True</property>
+                                            <property name="padding">10</property>
+                                            <property name="position">0</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkTreeView" id="network_interfaces_treeview">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">True</property>
+                                            <property name="fill">True</property>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkVButtonBox" id="vbuttonbox1">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <child>
+                                              <object class="GtkButton" id="network_interfaces_restore_defaults_button">
+                                                <property name="label" translatable="yes">Restore Defaults</property>
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="receives_default">True</property>
+                                              </object>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="fill">False</property>
+                                                <property name="position">0</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <placeholder/>
+                                            </child>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="fill">False</property>
+                                            <property name="position">2</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child type="label">
+                                  <object class="GtkLabel" id="label1">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Advanced</property>
+                                  </object>
+                                </child>
                               </object>
                               <packing>
-                                <property name="left_attach">1</property>
-                                <property name="right_attach">2</property>
-                                <property name="top_attach">1</property>
-                                <property name="bottom_attach">2</property>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
                               </packing>
                             </child>
                           </object>
@@ -1052,71 +1748,6 @@ view</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkExpander" id="expander1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <child>
-                      <object class="GtkVBox" id="network_vbox2">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <child>
-                          <object class="GtkTreeView" id="network_interfaces_treeview">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <placeholder/>
-                        </child>
-                        <child>
-                          <object class="GtkVButtonBox" id="vbuttonbox1">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child>
-                              <object class="GtkButton" id="network_interfaces_restore_defaults_button">
-                                <property name="label" translatable="yes">Restore Defaults</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">2</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                    <child type="label">
-                      <object class="GtkLabel" id="label1">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Advanced</property>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
               </object>
               <packing>
                 <property name="position">2</property>
@@ -1185,40 +1816,120 @@ view</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="temperature_tag_hbox">
+                              <object class="GtkExpander" id="expander8">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="spacing">5</property>
                                 <child>
-                                  <object class="GtkLabel" id="temperature_tag_label">
+                                  <object class="GtkTable" id="table8">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="label" translatable="yes">Tag:  </property>
+                                    <property name="n_rows">2</property>
+                                    <property name="n_columns">4</property>
+                                    <property name="column_spacing">5</property>
+                                    <property name="row_spacing">5</property>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="temperature_tag_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Tag:  </property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="temperature_tag_entry">
+                                        <property name="width_request">80</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+in the optional text overlay in a curve
+view</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="invisible_char_set">True</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="temperature_refresh_delay_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Refresh every</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="temperature_refresh_delay_spinbutton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                        <property name="adjustment">temperature_delay_adjustment</property>
+                                        <property name="climb_rate">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label17">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes"> seconds</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="right_attach">3</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="temperature_refresh_delay_default_button">
+                                        <property name="label" translatable="yes">Reset</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">3</property>
+                                        <property name="right_attach">4</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
                                 </child>
-                                <child>
-                                  <object class="GtkEntry" id="temperature_tag_entry">
-                                    <property name="width_request">80</property>
+                                <child type="label">
+                                  <object class="GtkLabel" id="label8">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
-in the optional text overlay in a curve
-view</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Advanced</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
                                 </child>
                               </object>
                               <packing>
@@ -1294,40 +2005,120 @@ view</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="fan_speed_tag_hbox">
+                              <object class="GtkExpander" id="expander9">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="spacing">5</property>
                                 <child>
-                                  <object class="GtkLabel" id="fan_speed_tag_label">
+                                  <object class="GtkTable" id="table9">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="label" translatable="yes">Tag:  </property>
+                                    <property name="n_rows">2</property>
+                                    <property name="n_columns">4</property>
+                                    <property name="column_spacing">5</property>
+                                    <property name="row_spacing">5</property>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="fan_speed_tag_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Tag:  </property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="fan_speed_tag_entry">
+                                        <property name="width_request">80</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
+in the optional text overlay in a curve
+view</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="invisible_char_set">True</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="fan_speed_refresh_delay_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Refresh every</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="fan_speed_refresh_delay_spinbutton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="primary_icon_activatable">False</property>
+                                        <property name="secondary_icon_activatable">False</property>
+                                        <property name="primary_icon_sensitive">True</property>
+                                        <property name="secondary_icon_sensitive">True</property>
+                                        <property name="adjustment">fan_delay_adjustment</property>
+                                        <property name="climb_rate">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label18">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes"> seconds</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="right_attach">3</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="fan_speed_refresh_delay_default_button">
+                                        <property name="label" translatable="yes">Reset</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">3</property>
+                                        <property name="right_attach">4</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
                                 </child>
-                                <child>
-                                  <object class="GtkEntry" id="fan_speed_tag_entry">
-                                    <property name="width_request">80</property>
+                                <child type="label">
+                                  <object class="GtkLabel" id="label9">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">Tag to display along with monitor data
-in the optional text overlay in a curve
-view</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Advanced</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
                                 </child>
                               </object>
                               <packing>
@@ -1828,6 +2619,75 @@ view</property>
                                 <property name="position">9</property>
                               </packing>
                             </child>
+                            <child>
+                              <object class="GtkHBox" id="generic_refresh_delay_hbox">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkLabel" id="generic_refresh_delay_label">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Refresh every</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkSpinButton" id="generic_refresh_delay_spinbutton">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">Seconds delay between measurements
+taken by the monitor</property>
+                                    <property name="invisible_char">●</property>
+                                    <property name="primary_icon_activatable">False</property>
+                                    <property name="secondary_icon_activatable">False</property>
+                                    <property name="primary_icon_sensitive">True</property>
+                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="adjustment">generic_delay_adjustment</property>
+                                    <property name="climb_rate">1</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkLabel" id="label19">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes"> seconds</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkButton" id="generic_refresh_delay_default_button">
+                                    <property name="label" translatable="yes">Reset</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">3</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">10</property>
+                              </packing>
+                            </child>
                           </object>
                           <packing>
                             <property name="expand">False</property>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list