diff --git a/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd b/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd
index a1b71ddbc14d7fa7eed1571e404ce8112514aecb..4af9c16f9f721b694bd7dba706159b08a2990ffd 100644
--- a/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd
+++ b/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd
@@ -43,8 +43,8 @@ ENTITY corr_accumulator IS
     rst            : IN  STD_LOGIC;
     clk            : IN  STD_LOGIC;
 
-    snk_in_arr     : IN  t_dp_sosi_arr;
-    src_out_arr    : OUT t_dp_sosi_arr
+    snk_in_arr     : IN  t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0);
+    src_out_arr    : OUT t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0)
   );
 END corr_accumulator;
 
@@ -74,7 +74,7 @@ ARCHITECTURE str OF corr_accumulator IS
   TYPE t_common_shiftram_data_out_shift_arr IS ARRAY(g_nof_inputs-1 DOWNTO 0) OF STD_LOGIC_VECTOR(c_shift_w-1 DOWNTO 0);
   SIGNAL common_shiftram_data_out_shift_arr : t_common_shiftram_data_out_shift_arr;
 
-
+  SIGNAL nxt_src_out_arr              : t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0);
 
 BEGIN
 
@@ -97,17 +97,6 @@ BEGIN
                                                                       common_shiftram_src_out_arr(i).data(  c_acc_data_w-1 DOWNTO 0);  
   END GENERATE;
 
-  p_clk : PROCESS (clk, rst)
-  BEGIN
-    IF rst='1' THEN
-      acc_cnt <= (OTHERS=>'0');
-      corr_adder_snk_in_2arr_2 <= (OTHERS=>(OTHERS=>c_dp_sosi_rst));
-    ELSIF rising_edge(clk) THEN
-      acc_cnt <= nxt_acc_cnt; 
-      corr_adder_snk_in_2arr_2 <= nxt_corr_adder_snk_in_2arr_2;
-    END IF;
-  END PROCESS;
-
   -----------------------------------------------------------------------------
   -- Complex adder stage
   -----------------------------------------------------------------------------
@@ -158,13 +147,33 @@ BEGIN
   END GENERATE;
 
   -----------------------------------------------------------------------------
-  -- Output 1/g_nof_acc_per_input words per stream
-  -- . Not implemented yet.
+  -- Output g_nof_words_to_acc per stream once per integration period
+  -- . The first g_nof_acc_per_input words are output. At the same time, the
+  --   accumulators are reset (zeros) at the adder inputs.
+  -- . Make sure the shiftram output is valid too so we don't output a block
+  --   of zeros initially.
   -----------------------------------------------------------------------------
   gen_src_out_arr : FOR i IN 0 TO g_nof_inputs-1 GENERATE
-    src_out_arr(i).re(c_acc_data_w-1 DOWNTO 0) <= common_shiftram_src_out_arr(i).data(2*c_acc_data_w-1 DOWNTO c_acc_data_w);
-    src_out_arr(i).im(c_acc_data_w-1 DOWNTO 0) <= common_shiftram_src_out_arr(i).data(  c_acc_data_w-1 DOWNTO 0);
-    src_out_arr(i).valid                       <= common_shiftram_src_out_arr(i).valid;
+    nxt_src_out_arr(i).re(c_acc_data_w-1 DOWNTO 0) <= common_shiftram_src_out_arr(i).data(2*c_acc_data_w-1 DOWNTO c_acc_data_w);
+    nxt_src_out_arr(i).im(c_acc_data_w-1 DOWNTO 0) <= common_shiftram_src_out_arr(i).data(  c_acc_data_w-1 DOWNTO 0);
+    
+    nxt_src_out_arr(i).valid <= '1' WHEN TO_UINT(acc_cnt)<g_nof_acc_per_input AND common_shiftram_src_out_arr(0).valid='1' ELSE '0';
   END GENERATE;
 
+  -----------------------------------------------------------------------------
+  -- Registers
+  -----------------------------------------------------------------------------
+  p_clk : PROCESS (clk, rst)
+  BEGIN
+    IF rst='1' THEN
+      acc_cnt                  <= (OTHERS=>'0');
+      corr_adder_snk_in_2arr_2 <= (OTHERS=>(OTHERS=>c_dp_sosi_rst));
+      src_out_arr              <= (OTHERS=>c_dp_sosi_rst);
+    ELSIF rising_edge(clk) THEN
+      acc_cnt                  <= nxt_acc_cnt; 
+      corr_adder_snk_in_2arr_2 <= nxt_corr_adder_snk_in_2arr_2;
+      src_out_arr              <= nxt_src_out_arr;
+    END IF;
+  END PROCESS;
+
 END str;
diff --git a/libraries/dsp/correlator/tb/python/tc_correlator.py b/libraries/dsp/correlator/tb/python/tc_correlator.py
index d897a8d174344ff9f9a2d6d4742bc38cf27d73ee..9e5bb24d88754bd30c4c48ae45bec64e6dcebeea 100644
--- a/libraries/dsp/correlator/tb/python/tc_correlator.py
+++ b/libraries/dsp/correlator/tb/python/tc_correlator.py
@@ -35,76 +35,71 @@ COMPLEX_WIDTH = 16
 NOF_INPUTS = 10
 NOF_OUTPUTS = NOF_INPUTS*(NOF_INPUTS+1)/2
 NOF_CHANNELS = 64
-NOF_TIMESAMPLES = 4
-
-#BUFFER_DEPTH = 256
-BUFFER_WIDTH = 64 #2*COMPLEX_WIDTH
+BUFFER_WIDTH = 64
 
 tc = test_case.Testcase('TB - ', '')
 io = node_io.NodeIO(tc.nodeImages, tc.base_ip)
-db = pi_diag_data_buffer.PiDiagDataBuffer(tc, io, nofStreams=NOF_OUTPUTS, ramSizePerStream=2*256)
+db = pi_diag_data_buffer.PiDiagDataBuffer(tc, io, nofStreams=NOF_OUTPUTS, ramSizePerStream=2*NOF_CHANNELS)
 
 ###############################################################################
 # Read data buffers
-# . Read 256 words
-# . 256 words = 4 timesamples * 64 channels
+# . Read NOF_CHANNELS accumulator values
 ###############################################################################
 data = []
 
-do_until_ge(db.read_nof_words, ms_retry=2000, val=256, s_timeout=900)
+do_until_ge(db.read_nof_words, ms_retry=2000, val=NOF_CHANNELS, s_timeout=900)
 for output_nr in range(NOF_OUTPUTS):
-    data.append( db.read_data_buffer(streamNr=output_nr, n=2*256, radix='uns', width=BUFFER_WIDTH, nofColumns=12)[0] )
+    data.append( db.read_data_buffer(streamNr=output_nr, n=2*NOF_CHANNELS, radix='uns', width=BUFFER_WIDTH, nofColumns=12)[0] )
 
 ###############################################################################
-# 'data' is now a 2d array of [NOF_OUTPUTS][NOF_TIMESAMPLES*NOF_CHANNELS]. We
+# 'data' is now a 2d array of [NOF_OUTPUTS][NOF_CHANNELS]. We
 # want to group the outputs by channel, so transpose this 2d array into 
-# [NOF_TIMESAMPLES*NOF_CHANNELS][NOF_OUTPUTS]
+# [NOF_CHANNELS][NOF_OUTPUTS]
 ###############################################################################
 data = transpose(data)
 
-for sample_nr in range(NOF_TIMESAMPLES):
-    mat_list = []
-    amplitudes = []
-    for channel_nr in range(NOF_CHANNELS):
-        ###############################################################################
-        # Convert the unsigned words to complex
-        ###############################################################################
-        channel_data = data[sample_nr*NOF_CHANNELS+channel_nr]
-        for index,word in enumerate(channel_data):
-            word_bits = CommonBits(word, BUFFER_WIDTH)
-            re = word_bits[BUFFER_WIDTH-1:BUFFER_WIDTH/2]
-            im = word_bits[BUFFER_WIDTH/2-1:0]
-            channel_data[index] = complex(im, re)
-        
-        ###############################################################################
-        # Convert binomials to complex phasor notation
-        ###############################################################################
-        for index,word in enumerate(channel_data):
-            channel_data[index] = complex_binomial_to_phasor(word)
-       
-        ###############################################################################
-        # Extract the phases and amplitudes from the complex data
-        ###############################################################################
-        phases = []
-
-        for word in channel_data:
-            amplitudes.append(word[0])
-            phases.append(word[1])
-       
-        ################################################################################
-        # Re-shape the flat list into a matrix
-        ################################################################################
-        mat = unique_vis_to_full_matrix(phases)    
-        mat_list.append(mat)
+mat_list = []
+amplitudes = []
+for channel_nr in range(NOF_CHANNELS):
+    ###############################################################################
+    # Convert the unsigned words to complex
+    ###############################################################################
+    channel_data = data[channel_nr]
+    for index,word in enumerate(channel_data):
+        word_bits = CommonBits(word, BUFFER_WIDTH)
+        re = word_bits[BUFFER_WIDTH-1:BUFFER_WIDTH/2]
+        im = word_bits[BUFFER_WIDTH/2-1:0]
+        channel_data[index] = complex(im, re)
     
+    ###############################################################################
+    # Convert binomials to complex phasor notation
+    ###############################################################################
+    for index,word in enumerate(channel_data):
+        channel_data[index] = complex_binomial_to_phasor(word)
+   
+    ###############################################################################
+    # Extract the phases and amplitudes from the complex data
+    ###############################################################################
+    phases = []
+
+    for word in channel_data:
+        amplitudes.append(word[0])
+        phases.append(word[1])
+   
     ################################################################################
-    # re-shape the flat list of 64 matrices into a an 8*8 matrix of matrices, plot
+    # Re-shape the flat list into a matrix
     ################################################################################
-    print 'Plotting phases of timesample %d, %d channels.' %(sample_nr,NOF_CHANNELS)
-    print '. Channel amplitudes:'
-    for channel_nr in range(NOF_CHANNELS):
-        print '   .', channel_nr, ' - ', amplitudes[channel_nr]
+    mat = unique_vis_to_full_matrix(phases)    
+    mat_list.append(mat)
+
+################################################################################
+# re-shape the flat list of 64 matrices into a an 8*8 matrix of matrices, plot
+################################################################################
+print 'Plotting phases of %d channels.' %NOF_CHANNELS
+print '. Channel amplitudes:'
+for channel_nr in range(NOF_CHANNELS):
+    print '   .', channel_nr, ' - ', amplitudes[channel_nr]
 
-    mat_mat = split_list(mat_list, 8)
-    plot_matrix_color(mat_mat)
+mat_mat = split_list(mat_list, 8)
+plot_matrix_color(mat_mat)
 
diff --git a/libraries/dsp/correlator/tb/vhdl/tb_correlator.vhd b/libraries/dsp/correlator/tb/vhdl/tb_correlator.vhd
index 9fc0be2024768ff1e741f551c700bd6d080a39df..f9005796bec977d7910fa2405fdedbcdb066893b 100644
--- a/libraries/dsp/correlator/tb/vhdl/tb_correlator.vhd
+++ b/libraries/dsp/correlator/tb/vhdl/tb_correlator.vhd
@@ -37,6 +37,7 @@ ARCHITECTURE tb OF tb_correlator IS
 
   CONSTANT c_nof_inputs         : NATURAL := 10;
   CONSTANT c_nof_mults          : NATURAL := (c_nof_inputs*(c_nof_inputs+1))/2;
+  CONSTANT c_nof_channels       : NATURAL := 64;
 
   CONSTANT c_dp_clk_period      : TIME := 10 ns;
   CONSTANT c_mm_clk_period      : TIME := 10 ps;
@@ -148,7 +149,7 @@ BEGIN
     g_nof_streams  => c_nof_mults,
     g_data_w       => 64,
     g_data_type    => e_complex,
-    g_buf_nof_data => 256, --c_bg_block_size,
+    g_buf_nof_data => c_nof_channels,
     g_buf_use_sync => FALSE 
   )
   PORT MAP (