diff --git a/src/debug.h b/src/debug.h
index 5cc1e6c4d1fca599be09d1b3d7bce7090c684167..234b7c74afd4dbdd6290ea792217267f93cb0a72 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -169,7 +169,10 @@ class DebugStacker
 	bool m_overflowed;
 };
 
-#define DSTACK(...)\
+#define DSTACK(msg)\
+	DebugStacker __debug_stacker(msg);
+
+#define DSTACKF(...)\
 	char __buf[DEBUG_STACK_TEXT_SIZE];\
 	snprintf(__buf,\
 			DEBUG_STACK_TEXT_SIZE, __VA_ARGS__);\
diff --git a/src/map.cpp b/src/map.cpp
index 02614e1aed8663540e3d0a6e6e403181c02afba4..63f01ddee0de773018e2d02481467b4eb0874a97 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -3830,7 +3830,7 @@ MapChunk* ServerMap::generateChunk(v2s16 chunkpos1,
 
 ServerMapSector * ServerMap::createSector(v2s16 p2d)
 {
-	DSTACK("%s: p2d=(%d,%d)",
+	DSTACKF("%s: p2d=(%d,%d)",
 			__FUNCTION_NAME,
 			p2d.X, p2d.Y);
 	
@@ -3982,7 +3982,7 @@ MapBlock * ServerMap::generateBlock(
 		core::map<v3s16, MapBlock*> &lighting_invalidated_blocks
 )
 {
-	DSTACK("%s: p=(%d,%d,%d)",
+	DSTACKF("%s: p=(%d,%d,%d)",
 			__FUNCTION_NAME,
 			p.X, p.Y, p.Z);
 
@@ -4618,7 +4618,7 @@ MapBlock * ServerMap::generateBlock(
 
 MapBlock * ServerMap::createBlock(v3s16 p)
 {
-	DSTACK("%s: p=(%d,%d,%d)",
+	DSTACKF("%s: p=(%d,%d,%d)",
 			__FUNCTION_NAME, p.X, p.Y, p.Z);
 	
 	/*
@@ -4682,7 +4682,7 @@ MapBlock * ServerMap::emergeBlock(
 		core::map<v3s16, MapBlock*> &lighting_invalidated_blocks
 )
 {
-	DSTACK("%s: p=(%d,%d,%d), only_from_disk=%d",
+	DSTACKF("%s: p=(%d,%d,%d), only_from_disk=%d",
 			__FUNCTION_NAME,
 			p.X, p.Y, p.Z, only_from_disk);
 	
diff --git a/src/mapblockobject.cpp b/src/mapblockobject.cpp
index 343926f8152f733426ea8f949f927541e267e716..d05eee808891f5f112b748e3204b9d280ab239fe 100644
--- a/src/mapblockobject.cpp
+++ b/src/mapblockobject.cpp
@@ -63,7 +63,7 @@ v3f MovingObject::getAbsoluteShowPos()
 
 void MovingObject::move(float dtime, v3f acceleration)
 {
-	DSTACK("%s: typeid=%i, pos=(%f,%f,%f), speed=(%f,%f,%f)"
+	DSTACKF("%s: typeid=%i, pos=(%f,%f,%f), speed=(%f,%f,%f)"
 			", dtime=%f, acc=(%f,%f,%f)",
 			__FUNCTION_NAME,
 			getTypeId(),
@@ -755,7 +755,7 @@ void MapBlockObjectList::step(float dtime, bool server, u32 daynight_ratio)
 	core::map<s16, bool> ids_to_delete;
 
 	{
-		DSTACK("%s: stepping objects", __FUNCTION_NAME);
+		DSTACKF("%s: stepping objects", __FUNCTION_NAME);
 
 		for(core::map<s16, MapBlockObject*>::Iterator
 				i = m_objects.getIterator();
@@ -763,7 +763,7 @@ void MapBlockObjectList::step(float dtime, bool server, u32 daynight_ratio)
 		{
 			MapBlockObject *obj = i.getNode()->getValue();
 			
-			DSTACK("%s: stepping object type %i", __FUNCTION_NAME,
+			DSTACKF("%s: stepping object type %i", __FUNCTION_NAME,
 					obj->getTypeId());
 
 			if(server)
@@ -791,7 +791,7 @@ void MapBlockObjectList::step(float dtime, bool server, u32 daynight_ratio)
 	}
 
 	{
-		DSTACK("%s: deleting objects", __FUNCTION_NAME);
+		DSTACKF("%s: deleting objects", __FUNCTION_NAME);
 
 		// Delete objects in delete queue
 		for(core::map<s16, bool>::Iterator
@@ -815,7 +815,7 @@ void MapBlockObjectList::step(float dtime, bool server, u32 daynight_ratio)
 		return;
 	
 	{
-		DSTACK("%s: object wrap loop", __FUNCTION_NAME);
+		DSTACKF("%s: object wrap loop", __FUNCTION_NAME);
 
 		for(core::map<s16, MapBlockObject*>::Iterator
 				i = m_objects.getIterator();