Index: darkplaces/prvm_cmds.c
diff -u darkplaces/prvm_cmds.c:1.39 darkplaces/prvm_cmds.c:1.40
--- darkplaces/prvm_cmds.c:1.39	Sun Oct 17 15:48:02 2004
+++ darkplaces/prvm_cmds.c	Thu Oct 21 13:44:34 2004
@@ -1912,8 +1912,8 @@
 {
 	char *s;
 
-	if(prog->argc < 2) 
-		PRVM_ERROR("VM_strcat wrong parameter count (min. 2 expected ) !\n");
+	if(prog->argc < 1) 
+		PRVM_ERROR("VM_strcat wrong parameter count (min. 1 expected ) !\n");
 	
 	s = VM_GetTempString();
 	VM_VarString(0, s, VM_STRINGTEMP_LENGTH);
@@ -1997,9 +1997,14 @@
 //void(string s) strunzone = #119; // removes a copy of a string from the string zone (you can not use that string again or it may crash!!!)
 void VM_strunzone(void)
 {
+	char *str;
 	VM_SAFEPARMCOUNT(1,VM_strunzone);
 
-	Mem_Free(PRVM_G_STRING(OFS_PARM0));
+	str = PRVM_G_STRING(OFS_PARM0);
+	if( developer.integer && !Mem_IsAllocated( VM_STRINGS_MEMPOOL, str ) )
+		PRVM_ERROR( "VM_strunzone: Zone string already freed in %s!", PRVM_NAME );
+	else
+		Mem_Free( str );
 }
 
 /*
Index: darkplaces/zone.c
diff -u darkplaces/zone.c:1.23 darkplaces/zone.c:1.24
--- darkplaces/zone.c:1.23	Wed Aug 25 04:50:52 2004
+++ darkplaces/zone.c	Thu Oct 21 13:44:34 2004
@@ -330,6 +330,19 @@
 #endif
 }
 
+qboolean Mem_IsAllocated(mempool_t *pool, void *data)
+{
+	memheader_t *header;
+	memheader_t *target;
+
+    target = (memheader_t *)((qbyte *) data - sizeof(memheader_t));
+	for( header = pool->chain ; header ; header = header->next )
+		if( header == target )
+			return true;
+	return false;
+}
+
+
 // used for temporary memory allocations around the engine, not for longterm
 // storage, if anything in this pool stays allocated during gameplay, it is
 // considered a leak
Index: darkplaces/zone.h
diff -u darkplaces/zone.h:1.15 darkplaces/zone.h:1.16
--- darkplaces/zone.h:1.15	Wed Aug 25 04:50:52 2004
+++ darkplaces/zone.h	Thu Oct 21 13:44:34 2004
@@ -132,6 +132,7 @@
 void _Mem_EmptyPool(mempool_t *pool, const char *filename, int fileline);
 void _Mem_CheckSentinels(void *data, const char *filename, int fileline);
 void _Mem_CheckSentinelsGlobal(const char *filename, int fileline);
+qboolean Mem_IsAllocated(mempool_t *pool, void *data);
 
 // used for temporary allocations
 mempool_t *tempmempool;