+Category *catentry = da_cat_get(key);
+guint32 retval = 0;
+
+ if(catentry)
+ {
+ if(subcat == FALSE)
+ {
+ retval = (catentry->flags & GF_SUB) ? catentry->parent : catentry->key;
+ }
+ else
+ {
+ retval = catentry->key;
+ }
+ }
+ return retval;
+}
+
+
+void
+category_delete_unused(void)
+{
+GList *lcat, *list;
+
+ lcat = list = g_hash_table_get_values(GLOBALS->h_cat);
+ while (list != NULL)
+ {
+ Category *entry = list->data;
+
+ if(entry->usage_count <= 0 && entry->key > 0)
+ da_cat_remove (entry->key);
+
+ list = g_list_next(list);
+ }
+ g_list_free(lcat);
+}
+
+
+static void
+category_fill_usage_count(guint32 kcat)
+{
+Category *cat = da_cat_get (kcat);
+Category *parent;
+
+ if(cat)
+ {
+ cat->usage_count++;
+ if( cat->parent > 0 )
+ {
+ parent = da_cat_get(cat->parent);
+ if( parent )
+ {
+ parent->usage_count++;
+ }
+ }
+ }
+}
+
+
+void
+category_fill_usage(void)
+{
+GList *lcat;
+GList *lst_acc, *lnk_acc;
+GList *lnk_txn;
+GList *lpay, *lrul, *list;