Index: /trunk/xcache.c
===================================================================
--- /trunk/xcache.c	(revision 31)
+++ /trunk/xcache.c	(revision 32)
@@ -140,4 +140,5 @@
 	xce->next = *head;
 	*head = xce;
+	xce->cache->entries_count ++;
 }
 /* }}} */
@@ -167,4 +168,5 @@
 		if (xc_entry_equal_dmz(xce, p)) {
 			*last = p->next;
+			xce->cache->entries_count ++;
 			if (p->refcount == 0) {
 				xc_entry_free_dmz(p);
@@ -174,4 +176,5 @@
 				p->cache->deletes = p;
 				p->dtime = XG(request_time);
+				xce->cache->deletes_count ++;
 			}
 			return;
@@ -224,6 +227,4 @@
 #endif
 	xc_mem_t *mem = cache->mem;
-	int i, c, count;
-	xc_entry_t *e;
 
 	add_assoc_long_ex(return_value, ZEND_STRS("slots"),     cache->hentry->size);
@@ -234,17 +235,6 @@
 	add_assoc_long_ex(return_value, ZEND_STRS("ooms"),      cache->ooms);
 
-	count = 0;
-	for (i = 0, c = cache->hentry->size; i < c; i ++) {
-		for (e = cache->entries[i]; e; e = e->next) {
-			count ++;
-		}
-	}
-	add_assoc_long_ex(return_value, ZEND_STRS("cached"), count);
-
-	count = 0;
-	for (e = cache->deletes; e; e = e->next) {
-		count ++;
-	}
-	add_assoc_long_ex(return_value, ZEND_STRS("deleted"), count);
+	add_assoc_long_ex(return_value, ZEND_STRS("cached"), cache->entries_count);
+	add_assoc_long_ex(return_value, ZEND_STRS("deleted"), cache->deletes_count);
 
 	MAKE_STD_ZVAL(blocks);
@@ -419,4 +409,5 @@
 					if (p->refcount == 0) {
 						*last = p->next;
+						cache->deletes_count --;
 						xc_entry_free_dmz(p);
 					}
Index: /trunk/xcache.h
===================================================================
--- /trunk/xcache.h	(revision 31)
+++ /trunk/xcache.h	(revision 32)
@@ -132,5 +132,7 @@
 
 	xc_entry_t **entries;
+	int entries_count;
 	xc_entry_t *deletes;
+	int deletes_count;
 	xc_hash_t  *hentry; /* hash to entry */
 } xc_cache_t;
