Index: src/libchcore/TDataBuffer.cpp
===================================================================
diff -u -N -r409a0af1e9fdea72ca016118d76a5a95e53496e8 -r6f082e25ab71169e9e631f139a2eddc4ef45d2e9
--- src/libchcore/TDataBuffer.cpp	(.../TDataBuffer.cpp)	(revision 409a0af1e9fdea72ca016118d76a5a95e53496e8)
+++ src/libchcore/TDataBuffer.cpp	(.../TDataBuffer.cpp)	(revision 6f082e25ab71169e9e631f139a2eddc4ef45d2e9)
@@ -228,7 +228,7 @@
 	// first the user-facing buffer size
 	if(stBufferSize == 0)
 	{
-		stBufferSize = DefaultMaxMemory;
+		stBufferSize = DefaultBufferSize;
 		bResult = false;
 	}
 	else
@@ -262,13 +262,13 @@
 		stMaxMemory = std::max(DefaultMaxMemory, RoundUp(DefaultMaxMemory, stPageSize));
 		bResult = false;
 	}
-	else if(stMaxMemory < stPageSize)
+	else
 	{
-		size_t stNewSize = RoundUp(stMaxMemory, stBufferSize);
-		if(stNewSize != stMaxMemory)
+		size_t stNewSize = RoundUp(stMaxMemory, stPageSize);
+		if(stMaxMemory != stNewSize)
 		{
+			stMaxMemory = stNewSize;
 			bResult = false;
-			stMaxMemory = stPageSize;
 		}
 	}
 
@@ -313,7 +313,7 @@
 
 bool TDataBufferManager::CheckResizeSize(size_t& stNewMaxSize)
 {
-	if(m_stPageSize == 0 || m_stMaxMemory == 0 || m_stBufferSize == 0)
+	if(!IsInitialized())
 	{
 		stNewMaxSize = 0;
 		return false;
@@ -362,11 +362,21 @@
 	}
 }
 
+size_t TDataBufferManager::GetRealAllocatedMemorySize() const
+{
+	return m_stPageSize * (m_vAllocBlocksToFree.size() + m_vVirtualAllocBlocks.size());
+}
+
 bool TDataBufferManager::HasFreeBuffer() const
 {
 	return !m_listUnusedBuffers.empty();
 }
 
+size_t TDataBufferManager::GetCountOfFreeBuffers() const
+{
+	return m_listUnusedBuffers.size();
+}
+
 bool TDataBufferManager::CanAllocPage() const
 {
 	if(!IsInitialized())
@@ -445,6 +455,7 @@
 	{
 		m_vAllocBlocksToFree.push_back(spAllocBlock);
 	}
+	m_stMaxMemory -= m_stPageSize;
 }
 
 bool TDataBufferManager::GetFreeBuffer(TSimpleDataBuffer& rSimpleBuffer)