diff --git a/Source/Plugins/BinaryWriter/FileMemoryBlock.h b/Source/Plugins/BinaryWriter/FileMemoryBlock.h
index e56edc4fa475f4c5641d08fc77716110a7c4f2e4..eb61a2fb7d956e04fce6e7cd40e2e61488e0999c 100644
--- a/Source/Plugins/BinaryWriter/FileMemoryBlock.h
+++ b/Source/Plugins/BinaryWriter/FileMemoryBlock.h
@@ -40,17 +40,28 @@ namespace BinaryRecordingEngine
 			m_offset(offset)
 		{};
 		~FileMemoryBlock() {
-			m_file->write(m_data, m_blockSize*sizeof(StorageType));
+			if (!m_flushed)
+			{
+				m_file->write(m_data, m_blockSize*sizeof(StorageType));
+			}
 		};
 
 		inline uint64 getOffset() { return m_offset; }
 		inline StorageType* getData() { return m_data.getData(); }
+		void partialFlush(size_t size, bool markFlushed = true)
+		{
+			std::cout << "flushing last block " << size << std::endl;
+			m_file->write(m_data, size*sizeof(StorageType));
+			if (markFlushed)
+				m_flushed = true;
+		}
 
 	private:
 		HeapBlock<StorageType> m_data;
 		FileOutputStream* const m_file;
 		const int m_blockSize;
 		const uint64 m_offset;
+		bool m_flushed{ false };
 		JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(FileMemoryBlock);
 	};
 }
diff --git a/Source/Plugins/BinaryWriter/SequentialBlockFile.cpp b/Source/Plugins/BinaryWriter/SequentialBlockFile.cpp
index 15e75d057457035e27299522844a68b12ca44daf..334de359d20d94de0931c8b376efdb626597df32 100644
--- a/Source/Plugins/BinaryWriter/SequentialBlockFile.cpp
+++ b/Source/Plugins/BinaryWriter/SequentialBlockFile.cpp
@@ -29,7 +29,8 @@ SequentialBlockFile::SequentialBlockFile(int nChannels, int samplesPerBlock) :
 m_file(nullptr),
 m_nChannels(nChannels),
 m_samplesPerBlock(samplesPerBlock),
-m_blockSize(nChannels*samplesPerBlock)
+m_blockSize(nChannels*samplesPerBlock),
+m_lastBlockFill(0)
 {
 	m_memBlocks.ensureStorageAllocated(blockArrayInitSize);
 	for (int i = 0; i < nChannels; i++)
@@ -38,10 +39,15 @@ m_blockSize(nChannels*samplesPerBlock)
 
 SequentialBlockFile::~SequentialBlockFile()
 {
-	//Ensure that all remaining blocks are flushed in order
+	//Ensure that all remaining blocks are flushed in order. Keep the last one
 	int n = m_memBlocks.size();
-	for (int i = 0; i < n; i++)
+	for (int i = 0; i < n - 1; i++)
+	{
 		m_memBlocks.remove(0);
+	}
+
+	//manually flush the last one to avoid trailing zeroes
+	m_memBlocks[0]->partialFlush(m_lastBlockFill * m_nChannels);
 }
 
 bool SequentialBlockFile::openFile(String filename)
@@ -86,6 +92,7 @@ bool SequentialBlockFile::writeChannel(uint64 startPos, int channel, int16* data
 	int startIdx = startPos - m_memBlocks[bIndex]->getOffset();
 	int startMemPos = startIdx*m_nChannels;
 	int dataIdx = 0;
+	int lastBlockIdx = m_memBlocks.size() - 1;
 	while (writtenSamples < nSamples)
 	{
 		int16* blockPtr = m_memBlocks[bIndex]->getData();
@@ -96,6 +103,14 @@ bool SequentialBlockFile::writeChannel(uint64 startPos, int channel, int16* data
 			dataIdx++;
 		}
 		writtenSamples += samplesToWrite;
+
+		//Update the last block fill index
+		size_t samplePos = startIdx + samplesToWrite;
+		if (bIndex == lastBlockIdx && samplePos > m_lastBlockFill)
+		{
+			m_lastBlockFill = samplePos;
+		}
+
 		startIdx = 0;
 		startMemPos = 0;
 		bIndex++;
@@ -140,6 +155,7 @@ void SequentialBlockFile::allocateBlocks(uint64 startIndex, int numSamples)
 		lastOffset += m_samplesPerBlock;
 		m_memBlocks.add(new FileBlock(m_file, m_blockSize, lastOffset));
 	}
-
+	if (newBlocks > 0)
+		m_lastBlockFill = 0; //we've added some new blocks, so the last one will be empty
 }
 
diff --git a/Source/Plugins/BinaryWriter/SequentialBlockFile.h b/Source/Plugins/BinaryWriter/SequentialBlockFile.h
index b5fd350aad449cad3b1687abe8b1abf390f84f15..a5b6e7e095f91727686b83bfc39030fdc57e007d 100644
--- a/Source/Plugins/BinaryWriter/SequentialBlockFile.h
+++ b/Source/Plugins/BinaryWriter/SequentialBlockFile.h
@@ -47,9 +47,11 @@ namespace BinaryRecordingEngine
 		const int m_blockSize;
 		OwnedArray<FileBlock> m_memBlocks;
 		Array<int> m_currentBlock;
+		size_t m_lastBlockFill;
 
 		void allocateBlocks(uint64 startIndex, int numSamples);
 
+
 		//Compile-time parameters
 		const int streamBufferSize{ 0 };
 		const int blockArrayInitSize{ 128 };