diff --git a/daemon/dbus/gkd-secret-property.c b/daemon/dbus/gkd-secret-property.c
index ecc2d66..c0e3a29 100644
--- a/daemon/dbus/gkd-secret-property.c
+++ b/daemon/dbus/gkd-secret-property.c
@@ -53,7 +53,13 @@ typedef enum _DataType {
 	 * The attribute is in the format: name\0value\0name2\0value2
 	 * Property is dbus dictionary of strings: a{ss}
 	 */
-	DATA_TYPE_FIELDS
+	DATA_TYPE_FIELDS,
+
+	/*
+	 * The attribute is a CK_ULONG
+	 * Property is DBUS_TYPE_UINT64_AS_STRING
+	 */
+	DATA_TYPE_ULONG
 } DataType;
 
 /* -----------------------------------------------------------------------------
@@ -91,6 +97,10 @@ property_to_attribute (const gchar *prop_name, CK_ATTRIBUTE_TYPE *attr_type, Dat
 		*attr_type = CKA_G_FIELDS;
 		*data_type = DATA_TYPE_FIELDS;
 
+	} else if (g_str_equal (prop_name, "LockIdleTimeout")) {
+		*attr_type = CKA_G_DESTRUCT_IDLE;
+		*data_type = DATA_TYPE_ULONG;
+
 	} else {
 		return FALSE;
 	}
@@ -129,6 +139,9 @@ attribute_to_property (CK_ATTRIBUTE_TYPE attr_type, const gchar **prop_name, Dat
 		*prop_name = "Attributes";
 		*data_type = DATA_TYPE_FIELDS;
 		break;
+	case CKA_G_DESTRUCT_IDLE:
+		*prop_name = "LockIdleTimeout";
+		*data_type = DATA_TYPE_ULONG;
 	default:
 		return FALSE;
 	};
@@ -267,6 +280,44 @@ iter_get_time (DBusMessageIter *iter, GP11Attribute* attr)
 }
 
 static void
+iter_append_ulong (DBusMessageIter *iter, GP11Attribute *attr)
+{
+	guint64 value;
+
+	g_assert (iter);
+	g_assert (attr);
+
+	if (!attr->value || attr->length != sizeof (CK_ULONG)) {
+		g_warning ("invalid value for ulong attribute");
+		value = 0;
+
+	} else {
+		value = *((CK_ULONG_PTR)(attr->value));
+	}
+
+	dbus_message_iter_append_basic (iter, DBUS_TYPE_UINT64, &value);
+}
+
+static gboolean
+iter_get_ulong (DBusMessageIter *iter, GP11Attribute* attr)
+{
+	guint64 value;
+
+	g_assert (iter);
+	g_assert (attr);
+
+	g_return_val_if_fail (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_UINT64, FALSE);
+	dbus_message_iter_get_basic (iter, &value);
+	if (value < 0) {
+		gp11_attribute_init_empty (attr, attr->type);
+		return TRUE;
+	}
+
+	gp11_attribute_init_ulong (attr, attr->type, value);
+	return TRUE;
+}
+
+static void
 iter_append_fields (DBusMessageIter *iter, GP11Attribute *attr)
 {
 	DBusMessageIter array;
@@ -388,6 +439,10 @@ iter_append_variant (DBusMessageIter *iter, DataType data_type, GP11Attribute *a
 		func = iter_append_fields;
 		sig = "a{ss}";
 		break;
+	case DATA_TYPE_ULONG:
+		func = iter_append_ulong;
+		sig = DBUS_TYPE_UINT64_AS_STRING;
+		break;
 	default:
 		g_assert (FALSE);
 		break;
@@ -430,6 +485,10 @@ iter_get_variant (DBusMessageIter *iter, DataType data_type, GP11Attribute *attr
 		func = iter_get_fields;
 		sig = "a{ss}";
 		break;
+	case DATA_TYPE_ULONG:
+		func = iter_get_ulong;
+		sig = DBUS_TYPE_UINT64_AS_STRING;
+		break;
 	default:
 		g_assert (FALSE);
 		break;
