diff --git a/objects/sensor_host_status_obj.c b/objects/sensor_host_status_obj.c
index 29545d1..a085220 100644
--- a/objects/sensor_host_status_obj.c
+++ b/objects/sensor_host_status_obj.c
@@ -10,39 +10,39 @@
 static guint heartbeat = 0;
 
 static GDBusObjectManagerServer *manager = NULL;
-
+/*
 static gboolean
-on_get_units    (SensorInteger  *sen,
+on_get_units    (SensorValue  *sen,
                 GDBusMethodInvocation  *invocation,
                 gpointer                user_data)
 {
-  const gchar* val = sensor_integer_get_units(sen);
-  sensor_integer_complete_get_units(sen,invocation,val);
+  const gchar* val = sensor_value_get_units(sen);
+  sensor_value_complete_get_units(sen,invocation,val);
   return TRUE;
 }
 
 static gboolean
-on_get (SensorInteger                 *sen,
+on_get (SensorValue                 *sen,
                 GDBusMethodInvocation  *invocation,
                 gpointer                user_data)
 {
-  guint reading = sensor_integer_get_value(sen);
-  sensor_integer_complete_get_value(sen,invocation,reading);
+  guint reading = sensor_value_get_value(sen);
+  sensor_value_complete_get_value(sen,invocation,reading);
   return TRUE;
 }
-
 static gboolean
-on_set (SensorInteger                 *sen,		
+on_set (SensorValue                 *sen,		
                 GDBusMethodInvocation  *invocation,
 		guint                   value,
                 gpointer                user_data)
 {
-	sensor_integer_set_value(sen,value);
-	sensor_integer_emit_changed(sen,value,sensor_integer_get_units(sen));
-	sensor_integer_complete_set_value(sen,invocation);
+	GVariant* v = NEW_VARIANT_U(value);
+	sensor_value_set_value(sen,v);
+	sensor_value_emit_changed(sen,v,sensor_value_get_units(sen));
+	sensor_value_complete_set_value(sen,invocation);
 	return TRUE;
 }
-
+*/
 static void 
 on_bus_acquired (GDBusConnection *connection,
                  const gchar     *name,
@@ -65,25 +65,29 @@
 		ObjectSkeleton *object = object_skeleton_new (s);
 		g_free (s);
 
-		SensorInteger *sensor = sensor_integer_skeleton_new ();
-  		object_skeleton_set_sensor_integer (object, sensor);
+		SensorValue *sensor = sensor_value_skeleton_new ();
+  		object_skeleton_set_sensor_value (object, sensor);
   		g_object_unref (sensor);
-		
+	
+		//must init variant
+		GVariant* v = NEW_VARIANT_U(0);
+		sensor_value_set_value(sensor,v);
+	
   		// set units
-  		sensor_integer_set_units(sensor,"");
+  		sensor_value_set_units(sensor,"");
   		//define method callbacks here
-  		g_signal_connect (sensor,
-                    "handle-get-value",
-                    G_CALLBACK (on_get),
-                    NULL); /* user_data */
-  		g_signal_connect (sensor,
-                    "handle-get-units",
-                    G_CALLBACK (on_get_units),
-                    NULL); /* user_data */
-  		g_signal_connect (sensor,
-                    "handle-set-value",
-                    G_CALLBACK (on_set),
-                    NULL); /* user_data */
+  		//g_signal_connect (sensor,
+                //    "handle-get-value",
+                //    G_CALLBACK (on_get),
+                //    NULL); /* user_data */
+  		//g_signal_connect (sensor,
+                //    "handle-get-units",
+                //    G_CALLBACK (on_get_units),
+                //    NULL); /* user_data */
+  		//g_signal_connect (sensor,
+                //    "handle-set-value",
+                //    G_CALLBACK (on_set),
+                //    NULL); /* user_data */
 
   		/* Export the object (@manager takes its own reference to @object) */
   		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
