diff --git a/include/ITAFilterbankIIR.h b/include/ITAFilterbankIIR.h
index 7ad2326f7f8215ae3ad72f6cfb0ab073029818ef..8d13d7fbde25cb25b4ca503b7c71c4077a867d56 100644
--- a/include/ITAFilterbankIIR.h
+++ b/include/ITAFilterbankIIR.h
@@ -33,7 +33,11 @@ public:
 	virtual inline ~CITAFilterbankIIR() {};
 
 	//! Factory method
-	static CITAFilterbankIIR* Create();
+	/**
+	  * @param[in] iBlockLength Processing block length
+	  * @param[in] dSampleRate Processing sampling rate
+	  */
+	static CITAFilterbankIIR* Create( const int iBlockLength, const double dSampleRate );
 
 	//! Filter samples, simple variant without any gain (factor)
 	/**
@@ -44,7 +48,7 @@ public:
 	  *
 	  * @note Input and output samples must have same length
 	  */
-	virtual void Process( const float* pfInputData, float* pfOutputData, const int iNumSamples ) = 0;
+	virtual void Process( const float* pfInputData, float* pfOutputData ) = 0;
 	
 private:
 	CITAFilterbankIIRImpl* m_pImpl; //!< DSP filter instance
diff --git a/src/ITAFilterbankIIR.cpp b/src/ITAFilterbankIIR.cpp
index c2c6aec5888809f185fb9d750790e3198c5d21a4..11caadfed9b3da87c0c520b3b582a559b21a4589 100644
--- a/src/ITAFilterbankIIR.cpp
+++ b/src/ITAFilterbankIIR.cpp
@@ -1,39 +1,45 @@
 #include <ITAFilterbankIIR.h>
 #include <ITAException.h>
+#include <ITASampleBuffer.h>
+#include <ITAFastMath.h>
 
 #include <DspFilters/Dsp.h>
 
 class CITAFilterbankIIRImpl : public CITAFilterbankIIR
 {
 public:
-	CITAFilterbankIIRImpl();
+	CITAFilterbankIIRImpl( const int iBlockLength, const double dSampleRate );
 	~CITAFilterbankIIRImpl();
-	void Process( const float* pfInputData, float* pfOutputData, const int iNumSamples );
+	void Process( const float* pfInputData, float* pfOutputData );
 private:
-	Dsp::SimpleFilter< Dsp::ChebyshevI::BandStop < 3 >, 2 > m_oFilterInstance;
+	Dsp::SimpleFilter< Dsp::ChebyshevI::BandStop< 8 >, 1 > m_oFilterInstance;
+	float* m_vpfIn[ 1 ];
+	int m_iBlockLength;
 };
 
-CITAFilterbankIIR* CITAFilterbankIIR::Create()
+CITAFilterbankIIR* CITAFilterbankIIR::Create( const int iBlockLength, const double dSampleRate )
 {
-	return new CITAFilterbankIIRImpl();
+	return new CITAFilterbankIIRImpl( iBlockLength, dSampleRate );
 }
 
-CITAFilterbankIIRImpl::CITAFilterbankIIRImpl()
+CITAFilterbankIIRImpl::CITAFilterbankIIRImpl( const int iBlockLength, const double dSampleRate )
 {
-	m_oFilterInstance.setup( 3,    // order
-		44100,// sample rate
-		4000, // center frequency
-		880,  // band width
-		1 );   // ripple dB
+	m_oFilterInstance.setup( 8,    // order
+		dSampleRate,// sample rate
+		900, // center frequency
+		200,  // band width
+		3 );   // ripple dB
+
+	m_iBlockLength = iBlockLength;
 }
 
 CITAFilterbankIIRImpl::~CITAFilterbankIIRImpl()
 {
 }
 
-void CITAFilterbankIIRImpl::Process( const float* pfInputData, float* pfOutputData, const int iNumSamples )
+void CITAFilterbankIIRImpl::Process( const float* pfInputData, float* pfOutputData )
 {
-	float* vpfIn[ 1 ];
-	vpfIn[ 0 ] = ( float* ) pfInputData;
-	m_oFilterInstance.process( iNumSamples, vpfIn );
+	fm_copy( pfOutputData, pfInputData, m_iBlockLength );
+	m_vpfIn[ 0 ] = pfOutputData;
+	m_oFilterInstance.process( m_iBlockLength, m_vpfIn );
 }
diff --git a/tests/ITADSPFilterbankIIRTest.cpp b/tests/ITADSPFilterbankIIRTest.cpp
index 478e2384bf7f79f9b1e5f78b161d811e9814d72f..325d95ff64a9b5b7d1e46deb759477ff5d7f29a6 100644
--- a/tests/ITADSPFilterbankIIRTest.cpp
+++ b/tests/ITADSPFilterbankIIRTest.cpp
@@ -34,8 +34,8 @@ using namespace std;
 
 const double g_dSampleRate = 44100;
 const int g_iBlockLength = 128;
-const int uiNumberOfFrames = 100;
-const std::string sInFilePath = "";
+const int uiNumberOfFrames = 10;
+const std::string sInFilePath = "IIR_in.wav";
 const std::string sOutFilePath = "IIR_out.wav";
 
 void TestFilterbankIIR();
@@ -48,9 +48,9 @@ int main( int, char** )
 
 void TestFilterbankIIR()
 {
-	ITAStreamFunctionGenerator sinesignal( 1, g_dSampleRate, g_iBlockLength, ITAStreamFunctionGenerator::SINE, 500.0f, 0.9f, true );
+	ITAStreamFunctionGenerator input_signal( 1, g_dSampleRate, g_iBlockLength, ITAStreamFunctionGenerator::DIRAC, 0.0f, 1.0f , false );
 
-	CITAFilterbankIIR* pFilterbank = CITAFilterbankIIR::Create();
+	CITAFilterbankIIR* pFilterbank = CITAFilterbankIIR::Create( g_iBlockLength, g_dSampleRate );
 
 	ITAAudiofileProperties props_in;
 	props_in.iChannels = 1;
@@ -75,8 +75,8 @@ void TestFilterbankIIR()
 	while( n < uiNumberOfFrames )
 	{
 		// Add new samples
-		psbInput->write( sinesignal.GetBlockPointer( 0, &oState ), g_iBlockLength );
-		pFilterbank->Process( psbInput->GetData(), (*psfOutput)[0].GetData(), g_iBlockLength );
+		psbInput->write( input_signal.GetBlockPointer( 0, &oState ), g_iBlockLength );
+		pFilterbank->Process( psbInput->GetData(), (*psfOutput)[0].GetData() );
 
 		std::vector< float* > pIn;
 		pIn.push_back( psbInput->data() );
@@ -84,9 +84,10 @@ void TestFilterbankIIR()
 		writer_out->write( psfOutput, g_iBlockLength );
 		n++;
 
-		sinesignal.IncrementBlockPointer();
+		input_signal.IncrementBlockPointer();
 
-		if( n % ( uiNumberOfFrames / 40 ) == 0 )
+		int x = uiNumberOfFrames / 40;
+		if( x != 0 && n % ( x ) == 0 )
 			cout << ".";
 	}