diff --git a/includes/gpio.c b/includes/gpio.c
new file mode 100644
index 0000000..221441b
--- /dev/null
+++ b/includes/gpio.c
@@ -0,0 +1,136 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <argp.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#include "gpio.h"
+
+
+void gpio_writec(GPIO* gpio, char value)
+{
+	char buf[1];
+	buf[0] = value;
+	if (write(gpio->fd, buf, 1) != 1)
+	{
+		//TODO: error handling
+		printf("Write error\n");
+	} 
+}
+
+void gpio_write(GPIO* gpio, uint8_t value)
+{
+	char buf[1];
+	buf[0] = '0';
+	if (value==1)
+	{
+		buf[0]='1';
+	} 
+	if (write(gpio->fd, buf, 1) != 1)
+	{
+		//TODO: error handling
+		printf("write error\n");
+	} 
+}
+
+uint8_t gpio_read(GPIO* gpio)
+{
+	char buf[1];
+	if (read(gpio->fd,&buf,1) != 1)
+	{
+		//TODO: error hjandling
+		printf("read error\n");
+	}
+	if (buf[0]=='1') {
+		return 1;
+	}
+	return 0;	
+
+}
+void gpio_clock_cycle(GPIO* gpio, int num_clks) {
+        int i=0;
+        for (i=0;i<num_clks;i++) {
+                gpio_writec(gpio,'0');
+                gpio_writec(gpio,'1');
+        }
+}
+
+// Gets the gpio device path from gpio manager object
+void gpio_init(GDBusConnection *connection, GPIO* gpio)
+{
+	GDBusProxy *proxy;
+	GError *error;
+	GVariant *result;
+
+	error = NULL;
+	g_assert_no_error (error);
+	error = NULL;
+	proxy = g_dbus_proxy_new_sync (connection,
+                                 G_DBUS_PROXY_FLAGS_NONE,
+                                 NULL,                      /* GDBusInterfaceInfo */
+                                 "org.openbmc.managers.Gpios", /* name */
+                                 "/org/openbmc/managers/Gpios", /* object path */
+                                 "org.openbmc.managers.Gpios",        /* interface */
+                                 NULL, /* GCancellable */
+                                 &error);
+	g_assert_no_error (error);
+
+	result = g_dbus_proxy_call_sync (proxy,
+                                   "init",
+                                   g_variant_new ("(s)", gpio->name),
+                                   G_DBUS_CALL_FLAGS_NONE,
+                                   -1,
+                                   NULL,
+                                   &error);
+  
+	g_assert_no_error (error);
+	g_assert (result != NULL);
+	g_variant_get (result, "(&si&s)", &gpio->dev,&gpio->num,&gpio->direction);
+	g_print("GPIO Lookup:  %s = %d,%s\n",gpio->name,gpio->num,gpio->direction);
+	
+	//export and set direction
+	char dev[254];
+	char data[4];
+	sprintf(dev,"%s/export",gpio->dev);
+	int fd = open(dev, O_WRONLY);
+	sprintf(data,"%d",gpio->num);
+	write(fd,data,strlen(data));
+	close(fd);
+
+	sprintf(dev,"%s/gpio%d/direction",gpio->dev,gpio->num);
+	fd = open(dev,O_WRONLY);
+	write(fd,gpio->direction,strlen(gpio->direction));
+	close(fd);
+
+
+}
+int gpio_open(GPIO* gpio)
+{
+	// open gpio for writing or reading
+	char buf[254];
+	if (strcmp(gpio->direction,"in")==0)
+	{
+		sprintf(buf, "%s/gpio%d/value", gpio->dev, gpio->num);
+		gpio->fd = open(buf, O_RDONLY);
+	}
+	else
+	{
+		sprintf(buf, "%s/gpio%d/value", gpio->dev, gpio->num);
+		gpio->fd = open(buf, O_WRONLY);
+
+	}
+	if (gpio->fd == -1)
+	{
+		printf("error opening: %s\n",buf);
+	}
+	return gpio->fd;
+}
+
+void gpio_close(GPIO* gpio)
+{
+	close(gpio->fd);
+}
diff --git a/includes/gpio.h b/includes/gpio.h
new file mode 100644
index 0000000..68d01bd
--- /dev/null
+++ b/includes/gpio.h
@@ -0,0 +1,25 @@
+#ifndef __OBJECTS_GPIO_UTILITIES_H__
+#define __OBJECTS_GPIO_UTILITIES_H__
+
+#include <stdint.h>
+#include <gio/gio.h>
+
+typedef struct {
+  gchar* name;
+  gchar* dev;
+  uint16_t num;
+  gchar* direction;
+  int fd;
+} GPIO;
+
+
+//gpio functions
+void gpio_init(GDBusConnection*, GPIO*);
+void gpio_close(GPIO*);
+int  gpio_open(GPIO*);
+void gpio_write(GPIO*, uint8_t);
+void gpio_writec(GPIO*, char);
+void gpio_clock_cycle(GPIO*, int);
+uint8_t gpio_read(GPIO*);
+
+#endif
diff --git a/includes/openbmc.h b/includes/openbmc.h
new file mode 100644
index 0000000..775e225
--- /dev/null
+++ b/includes/openbmc.h
@@ -0,0 +1,12 @@
+#ifndef __OPENBMC_H__
+#define __OPENBMC_H__
+
+#include <stdint.h>
+
+typedef struct {
+	gint argc;
+	gchar **argv;	
+
+} cmdline;
+
+#endif
diff --git a/includes/sensor_threshold.c b/includes/sensor_threshold.c
new file mode 100644
index 0000000..68c7ad7
--- /dev/null
+++ b/includes/sensor_threshold.c
@@ -0,0 +1,81 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <argp.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#include "interfaces/sensor2.h"
+#include "sensor_threshold.h"
+
+
+gboolean
+get_threshold_state (SensorIntegerThreshold    *sen,
+                   GDBusMethodInvocation  *invocation,
+                   gpointer               user_data)
+{
+  guint state = sensor_integer_threshold_get_state(sen);
+  sensor_integer_threshold_complete_get_state(sen,invocation,state);
+  return TRUE;
+}
+
+
+gboolean
+set_thresholds (SensorIntegerThreshold        *sen,
+                   GDBusMethodInvocation  *invocation,
+		   guint                  lc,
+		   guint                  lw,
+		   guint                  uw,
+		   guint                  uc,
+                   gpointer               user_data)
+{
+  sensor_integer_threshold_set_lower_critical(sen,lc);
+  sensor_integer_threshold_set_lower_warning(sen,lw);
+  sensor_integer_threshold_set_upper_warning(sen,uw);
+  sensor_integer_threshold_set_upper_critical(sen,uc);
+  sensor_integer_threshold_complete_set(sen,invocation);
+  sensor_integer_threshold_set_state(sen,NORMAL);
+  return TRUE;
+}
+
+
+void check_thresholds(SensorIntegerThreshold* sensor,guint value)
+{
+  	threshold_states current_state = sensor_integer_threshold_get_state(sensor);
+ 	if (current_state != NOT_SET) 
+	{
+		threshold_states state = NORMAL;
+
+		if (value < sensor_integer_threshold_get_lower_critical(sensor)) {
+    			state = LOWER_CRITICAL;
+  		}
+		else if(value < sensor_integer_threshold_get_lower_warning(sensor)) {
+    			state = LOWER_WARNING;
+		}
+		else if(value > sensor_integer_threshold_get_upper_critical(sensor)) {
+ 			state = UPPER_CRITICAL;
+		}
+		else if(value > sensor_integer_threshold_get_upper_warning(sensor)) {
+ 			state = UPPER_WARNING;
+		}
+		// only emit signal if threshold state changes
+		if (state != sensor_integer_threshold_get_state(sensor))
+		{
+			sensor_integer_threshold_set_state(sensor,state);
+			if (state == LOWER_CRITICAL || state == UPPER_CRITICAL)
+			{
+				sensor_integer_threshold_emit_critical(sensor);
+				g_print("Critical\n");
+			}
+ 			else if (state == LOWER_WARNING || state == UPPER_WARNING)
+			{
+ 				sensor_integer_threshold_emit_warning(sensor);
+				g_print("Warning\n");
+			}
+		}
+	}
+}
+
diff --git a/includes/sensor_threshold.h b/includes/sensor_threshold.h
new file mode 100644
index 0000000..0e0991c
--- /dev/null
+++ b/includes/sensor_threshold.h
@@ -0,0 +1,16 @@
+#ifndef __SENSOR_THRESHOLDS_H__
+#define __SENSOR_THRESHOLDS_H__
+
+#include <stdint.h>
+
+typedef enum { NOT_SET,NORMAL,LOWER_CRITICAL,LOWER_WARNING,UPPER_WARNING,UPPER_CRITICAL } threshold_states;
+
+gboolean get_threshold_state(SensorIntegerThreshold*,
+                   GDBusMethodInvocation*,gpointer);
+
+gboolean set_thresholds(SensorIntegerThreshold*,
+                   GDBusMethodInvocation*,guint,guint,guint,guint,gpointer);
+void check_thresholds(SensorIntegerThreshold*,guint);
+
+
+#endif
diff --git a/interfaces/sensor.c b/interfaces/sensor.c
index 64aaebf..a6820ae 100644
--- a/interfaces/sensor.c
+++ b/interfaces/sensor.c
@@ -379,6 +379,36 @@
   FALSE
 };
 
+static const _ExtendedGDBusArgInfo _sensor_integer_method_info_get_watchdog_OUT_ARG_watchdog =
+{
+  {
+    -1,
+    (gchar *) "watchdog",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _sensor_integer_method_info_get_watchdog_OUT_ARG_pointers[] =
+{
+  &_sensor_integer_method_info_get_watchdog_OUT_ARG_watchdog,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _sensor_integer_method_info_get_watchdog =
+{
+  {
+    -1,
+    (gchar *) "getWatchdog",
+    NULL,
+    (GDBusArgInfo **) &_sensor_integer_method_info_get_watchdog_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-watchdog",
+  FALSE
+};
+
 static const _ExtendedGDBusMethodInfo * const _sensor_integer_method_info_pointers[] =
 {
   &_sensor_integer_method_info_get_value,
@@ -387,6 +417,7 @@
   &_sensor_integer_method_info_set_poll_interval,
   &_sensor_integer_method_info_set_config_data,
   &_sensor_integer_method_info_get_threshold_state,
+  &_sensor_integer_method_info_get_watchdog,
   NULL
 };
 
@@ -565,16 +596,16 @@
   FALSE
 };
 
-static const _ExtendedGDBusPropertyInfo _sensor_integer_property_info_changed_tolerance =
+static const _ExtendedGDBusPropertyInfo _sensor_integer_property_info_watchdog =
 {
   {
     -1,
-    (gchar *) "changed_tolerance",
+    (gchar *) "watchdog",
     (gchar *) "i",
     G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
     NULL
   },
-  "changed-tolerance",
+  "watchdog",
   FALSE
 };
 
@@ -589,7 +620,7 @@
   &_sensor_integer_property_info_threshold_state,
   &_sensor_integer_property_info_poll_interval,
   &_sensor_integer_property_info_config_data,
-  &_sensor_integer_property_info_changed_tolerance,
+  &_sensor_integer_property_info_watchdog,
   NULL
 };
 
@@ -642,7 +673,7 @@
   g_object_class_override_property (klass, property_id_begin++, "threshold-state");
   g_object_class_override_property (klass, property_id_begin++, "poll-interval");
   g_object_class_override_property (klass, property_id_begin++, "config-data");
-  g_object_class_override_property (klass, property_id_begin++, "changed-tolerance");
+  g_object_class_override_property (klass, property_id_begin++, "watchdog");
   return property_id_begin - 1;
 }
 
@@ -660,10 +691,10 @@
  * @handle_get_threshold_state: Handler for the #SensorInteger::handle-get-threshold-state signal.
  * @handle_get_units: Handler for the #SensorInteger::handle-get-units signal.
  * @handle_get_value: Handler for the #SensorInteger::handle-get-value signal.
+ * @handle_get_watchdog: Handler for the #SensorInteger::handle-get-watchdog signal.
  * @handle_set_config_data: Handler for the #SensorInteger::handle-set-config-data signal.
  * @handle_set_poll_interval: Handler for the #SensorInteger::handle-set-poll-interval signal.
  * @handle_set_thresholds: Handler for the #SensorInteger::handle-set-thresholds signal.
- * @get_changed_tolerance: Getter for the #SensorInteger:changed-tolerance property.
  * @get_config_data: Getter for the #SensorInteger:config-data property.
  * @get_poll_interval: Getter for the #SensorInteger:poll-interval property.
  * @get_threshold_lower_critical: Getter for the #SensorInteger:threshold-lower-critical property.
@@ -673,6 +704,7 @@
  * @get_threshold_upper_warning: Getter for the #SensorInteger:threshold-upper-warning property.
  * @get_units: Getter for the #SensorInteger:units property.
  * @get_value: Getter for the #SensorInteger:value property.
+ * @get_watchdog: Getter for the #SensorInteger:watchdog property.
  * @changed: Handler for the #SensorInteger::changed signal.
  * @critical: Handler for the #SensorInteger::critical signal.
  * @warning: Handler for the #SensorInteger::warning signal.
@@ -825,6 +857,28 @@
     1,
     G_TYPE_DBUS_METHOD_INVOCATION);
 
+  /**
+   * SensorInteger::handle-get-watchdog:
+   * @object: A #SensorInteger.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-SensorInteger.getWatchdog">getWatchdog()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call sensor_integer_complete_get_watchdog() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-watchdog",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (SensorIntegerIface, handle_get_watchdog),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
   /* GObject signals for received D-Bus signals: */
   /**
    * SensorInteger::changed:
@@ -964,14 +1018,14 @@
   g_object_interface_install_property (iface,
     g_param_spec_boxed ("config-data", "config_data", "config_data", G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   /**
-   * SensorInteger:changed-tolerance:
+   * SensorInteger:watchdog:
    *
-   * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorInteger.changed_tolerance">"changed_tolerance"</link>.
+   * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorInteger.watchdog">"watchdog"</link>.
    *
    * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
    */
   g_object_interface_install_property (iface,
-    g_param_spec_int ("changed-tolerance", "changed_tolerance", "changed_tolerance", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+    g_param_spec_int ("watchdog", "watchdog", "watchdog", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
 /**
@@ -1294,34 +1348,34 @@
 }
 
 /**
- * sensor_integer_get_changed_tolerance: (skip)
+ * sensor_integer_get_watchdog: (skip)
  * @object: A #SensorInteger.
  *
- * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorInteger.changed_tolerance">"changed_tolerance"</link> D-Bus property.
+ * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorInteger.watchdog">"watchdog"</link> D-Bus property.
  *
  * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
  *
  * Returns: The property value.
  */
 gint 
-sensor_integer_get_changed_tolerance (SensorInteger *object)
+sensor_integer_get_watchdog (SensorInteger *object)
 {
-  return SENSOR_INTEGER_GET_IFACE (object)->get_changed_tolerance (object);
+  return SENSOR_INTEGER_GET_IFACE (object)->get_watchdog (object);
 }
 
 /**
- * sensor_integer_set_changed_tolerance: (skip)
+ * sensor_integer_set_watchdog: (skip)
  * @object: A #SensorInteger.
  * @value: The value to set.
  *
- * Sets the <link linkend="gdbus-property-org-openbmc-SensorInteger.changed_tolerance">"changed_tolerance"</link> D-Bus property to @value.
+ * Sets the <link linkend="gdbus-property-org-openbmc-SensorInteger.watchdog">"watchdog"</link> D-Bus property to @value.
  *
  * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
  */
 void
-sensor_integer_set_changed_tolerance (SensorInteger *object, gint value)
+sensor_integer_set_watchdog (SensorInteger *object, gint value)
 {
-  g_object_set (G_OBJECT (object), "changed-tolerance", value, NULL);
+  g_object_set (G_OBJECT (object), "watchdog", value, NULL);
 }
 
 /**
@@ -1972,6 +2026,104 @@
 }
 
 /**
+ * sensor_integer_call_get_watchdog:
+ * @proxy: A #SensorIntegerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorInteger.getWatchdog">getWatchdog()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call sensor_integer_call_get_watchdog_finish() to get the result of the operation.
+ *
+ * See sensor_integer_call_get_watchdog_sync() for the synchronous, blocking version of this method.
+ */
+void
+sensor_integer_call_get_watchdog (
+    SensorInteger *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "getWatchdog",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * sensor_integer_call_get_watchdog_finish:
+ * @proxy: A #SensorIntegerProxy.
+ * @out_watchdog: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_integer_call_get_watchdog().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with sensor_integer_call_get_watchdog().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+sensor_integer_call_get_watchdog_finish (
+    SensorInteger *proxy,
+    gint *out_watchdog,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(i)",
+                 out_watchdog);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * sensor_integer_call_get_watchdog_sync:
+ * @proxy: A #SensorIntegerProxy.
+ * @out_watchdog: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorInteger.getWatchdog">getWatchdog()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See sensor_integer_call_get_watchdog() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+sensor_integer_call_get_watchdog_sync (
+    SensorInteger *proxy,
+    gint *out_watchdog,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "getWatchdog",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(i)",
+                 out_watchdog);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
  * sensor_integer_complete_get_value:
  * @object: A #SensorInteger.
  * @invocation: (transfer full): A #GDBusMethodInvocation.
@@ -2088,6 +2240,27 @@
                    threshold_state));
 }
 
+/**
+ * sensor_integer_complete_get_watchdog:
+ * @object: A #SensorInteger.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @watchdog: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-SensorInteger.getWatchdog">getWatchdog()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+sensor_integer_complete_get_watchdog (
+    SensorInteger *object,
+    GDBusMethodInvocation *invocation,
+    gint watchdog)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(i)",
+                   watchdog));
+}
+
 /* ------------------------------------------------------------------------ */
 
 /**
@@ -2405,12 +2578,12 @@
 }
 
 static gint 
-sensor_integer_proxy_get_changed_tolerance (SensorInteger *object)
+sensor_integer_proxy_get_watchdog (SensorInteger *object)
 {
   SensorIntegerProxy *proxy = SENSOR_INTEGER_PROXY (object);
   GVariant *variant;
   gint value = 0;
-  variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "changed_tolerance");
+  variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "watchdog");
   if (variant != NULL)
     {
       value = g_variant_get_int32 (variant);
@@ -2465,7 +2638,7 @@
   iface->get_threshold_state = sensor_integer_proxy_get_threshold_state;
   iface->get_poll_interval = sensor_integer_proxy_get_poll_interval;
   iface->get_config_data = sensor_integer_proxy_get_config_data;
-  iface->get_changed_tolerance = sensor_integer_proxy_get_changed_tolerance;
+  iface->get_watchdog = sensor_integer_proxy_get_watchdog;
 }
 
 /**
@@ -3233,7 +3406,7 @@
 }
 
 static gint 
-sensor_integer_skeleton_get_changed_tolerance (SensorInteger *object)
+sensor_integer_skeleton_get_watchdog (SensorInteger *object)
 {
   SensorIntegerSkeleton *skeleton = SENSOR_INTEGER_SKELETON (object);
   gint value;
@@ -3284,7 +3457,7 @@
   iface->get_threshold_state = sensor_integer_skeleton_get_threshold_state;
   iface->get_poll_interval = sensor_integer_skeleton_get_poll_interval;
   iface->get_config_data = sensor_integer_skeleton_get_config_data;
-  iface->get_changed_tolerance = sensor_integer_skeleton_get_changed_tolerance;
+  iface->get_watchdog = sensor_integer_skeleton_get_watchdog;
 }
 
 /**
diff --git a/interfaces/sensor.h b/interfaces/sensor.h
index 4b4be38..45c2bf6 100644
--- a/interfaces/sensor.h
+++ b/interfaces/sensor.h
@@ -42,6 +42,10 @@
     SensorInteger *object,
     GDBusMethodInvocation *invocation);
 
+  gboolean (*handle_get_watchdog) (
+    SensorInteger *object,
+    GDBusMethodInvocation *invocation);
+
   gboolean (*handle_set_config_data) (
     SensorInteger *object,
     GDBusMethodInvocation *invocation,
@@ -60,8 +64,6 @@
     gint arg_upper_warning,
     gint arg_upper_critical);
 
-  gint  (*get_changed_tolerance) (SensorInteger *object);
-
   const gchar *const * (*get_config_data) (SensorInteger *object);
 
   gint  (*get_poll_interval) (SensorInteger *object);
@@ -80,6 +82,8 @@
 
   gint  (*get_value) (SensorInteger *object);
 
+  gint  (*get_watchdog) (SensorInteger *object);
+
   void (*changed) (
     SensorInteger *object,
     gint arg_value);
@@ -126,6 +130,11 @@
     GDBusMethodInvocation *invocation,
     gint threshold_state);
 
+void sensor_integer_complete_get_watchdog (
+    SensorInteger *object,
+    GDBusMethodInvocation *invocation,
+    gint watchdog);
+
 
 
 /* D-Bus signal emissions functions: */
@@ -256,6 +265,24 @@
     GCancellable *cancellable,
     GError **error);
 
+void sensor_integer_call_get_watchdog (
+    SensorInteger *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean sensor_integer_call_get_watchdog_finish (
+    SensorInteger *proxy,
+    gint *out_watchdog,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean sensor_integer_call_get_watchdog_sync (
+    SensorInteger *proxy,
+    gint *out_watchdog,
+    GCancellable *cancellable,
+    GError **error);
+
 
 
 /* D-Bus property accessors: */
@@ -288,8 +315,8 @@
 gchar **sensor_integer_dup_config_data (SensorInteger *object);
 void sensor_integer_set_config_data (SensorInteger *object, const gchar *const *value);
 
-gint sensor_integer_get_changed_tolerance (SensorInteger *object);
-void sensor_integer_set_changed_tolerance (SensorInteger *object, gint value);
+gint sensor_integer_get_watchdog (SensorInteger *object);
+void sensor_integer_set_watchdog (SensorInteger *object, gint value);
 
 
 /* ---- */
