diff --git a/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_mesh_ref/tc_apertif_unb1_correlator_mesh_ref.py b/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_mesh_ref/tc_apertif_unb1_correlator_mesh_ref.py
new file mode 100644
index 0000000000000000000000000000000000000000..cfb9d2cb8b4ec624bd60353a0c051eeabb3a8430
--- /dev/null
+++ b/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_mesh_ref/tc_apertif_unb1_correlator_mesh_ref.py
@@ -0,0 +1,232 @@
+#! /usr/bin/env python
+###############################################################################
+#
+# Copyright (C) 2012
+# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+###############################################################################
+
+"""Test case for the apertif_unb1_correlator_mesh_ref design.
+
+   Description:
+
+    
+   Usage:
+
+   > python tc_apertif_unb1_correlator_mesh_ref.py --gn 0:7 --sim 
+
+"""
+
+###############################################################################
+# System imports
+import test_case
+import node_io
+import unb_apertif as apr
+import pi_diag_block_gen
+import pi_diag_data_buffer
+import pi_bsn_monitor
+import pi_ppsh    
+import dsp_test
+
+import sys, os
+import subprocess  
+import time
+import pylab as pl
+import numpy as np
+import scipy as sp
+import random
+from tools import *
+from common import *  
+import mem_init_file
+
+###############################################################################
+
+# Create a test case object
+tc = test_case.Testcase('TB - ', '')
+
+# Constants/Generics that are shared between VHDL and Python
+# Name                   Value   Default   Description
+# START_VHDL_GENERICS
+g_nof_input_streams = 8       # 16 
+g_blocks_per_sync   = 16 #32   # 781250
+
+# Define settings for the block generator
+c_bg_nof_streams          = g_nof_input_streams 
+c_bg_ram_size             = 128
+c_db_nof_streams          = g_nof_input_streams
+c_db_ram_size             = 8
+c_samples_per_packet      = 128
+c_gapsize                 = 64
+c_mem_low_addr            = 0
+c_mem_high_addr           = c_samples_per_packet-1
+c_bsn_init                = 42
+c_in_dat_w                = 8
+c_nof_read_back_samples   = 1
+
+c_write_bg_data            = False 
+c_write_bg_data_to_file    = False  
+                             
+tc.append_log(3, '>>>')      
+tc.append_log(1, '>>> Title : Test script for apertif_unb1_correlator_mesh_ref' )
+tc.append_log(3, '>>>')
+tc.append_log(3, '')
+tc.set_result('PASSED')
+
+# Create access object for nodes
+io = node_io.NodeIO(tc.nodeImages, tc.base_ip)
+
+# Create block generator instance
+bg = pi_diag_block_gen.PiDiagBlockGen(tc, io, g_nof_input_streams, c_bg_ram_size, instanceName='MESH')
+
+# Create databuffer instances
+db_mesh = pi_diag_data_buffer.PiDiagDataBuffer(tc, io, instanceName = 'MESH', nofStreams=c_db_nof_streams, ramSizePerStream=c_db_ram_size)
+#db_im = pi_diag_data_buffer.PiDiagDataBuffer(tc, io, instanceName = 'IM', nofStreams=c_db_nof_streams, ramSizePerStream=c_db_ram_size)
+
+# Create bsn-monitor instance
+bsn = pi_bsn_monitor.PiBsnMonitor(tc, io, nofStreams=2)
+
+# Create dsp_test instance for helpful methods
+dsp_test_bg = dsp_test.DspTest(inDatW=c_in_dat_w)
+
+pps = pi_ppsh.PiPpsh(tc, io, nodeNr=tc.nodeFnNrs)
+
+if __name__ == "__main__":  
+     
+    ################################################################################
+    ##
+    ## Initialize the blockgenerators
+    ##
+    ################################################################################
+    # - Write settings to the block generator 
+    tc.append_log(3, '>>>')
+    tc.append_log(3, '>>> Write settings to the block generator')
+    tc.append_log(3, '>>>')
+
+    bg.write_block_gen_settings(c_samples_per_packet, g_blocks_per_sync, c_gapsize, c_mem_low_addr, c_mem_high_addr, c_bsn_init)
+    
+    # - Create a list with the input data and write it to the RAMs of the block generator
+    tc.append_log(3, '>>>')
+    tc.append_log(3, '>>> Write data to the waveform RAM of all channels')
+    tc.append_log(3, '>>>')
+    inputData = []
+    
+    dataList=[]
+    for h in range(tc.nofNodes):
+        nodeData = []
+        for i in xrange(0, g_nof_input_streams):
+            data = []
+            for j in xrange(0, c_samples_per_packet):
+                real = h & (2**c_in_dat_w-1)   # Node number in real part
+                imag = i & (2**c_in_dat_w-1)   # Streamnumber in imag part
+                data.append((imag << c_in_dat_w) + real)   
+            nodeData.append(data)
+        dataList.append(nodeData)
+
+    inputData = []
+    in_h = 0
+    for h in tc.nodeNrs:   
+        for i in xrange(g_nof_input_streams):
+            if c_write_bg_data == True:      
+                bg.write_waveform_ram(dataList[in_h][i], i, [h])
+            if c_write_bg_data_to_file == True:                                                                   
+                filename = "../../src/hex/node" + str(h) + "/bg_in_data_" + str(i) + ".hex"
+                mem_init_file.list_to_hex(list_in=dataList[in_h][i], filename=filename, mem_width=c_nof_complex*c_in_dat_w, mem_depth=2**(ceil_log2(c_bg_ram_size)))
+            dataListComplex = bg.convert_concatenated_to_complex(dataList[in_h][i], c_in_dat_w)
+            inputData.append(dataListComplex)  
+        in_h = in_h+1
+    
+    # - Enable the block generator
+    tc.append_log(3, '>>>')
+    tc.append_log(3, '>>> Start the block generator')
+    tc.append_log(3, '>>>')
+    tc.append_log(3, '')
+    
+    bg.write_enable_pps()
+    
+#    bsn.read_bsn_monitor(0)
+#    bsn.read_bsn_monitor(1)
+   
+    do_until_ge(db_mesh.read_nof_words, ms_retry=3000, val=c_db_ram_size, s_timeout=3600)
+    
+#    bsn.read_bsn_monitor(0)
+#    bsn.read_bsn_monitor(1)
+    
+    ###############################################################################
+    #
+    # Read data from data buffer
+    #
+    ###############################################################################
+    db_out = []
+    for i in range(c_bg_nof_streams): 
+        db_out.append(flatten(db_mesh.read_data_buffer(streamNr=i, n=c_nof_read_back_samples, radix='uns', width=c_nof_complex*c_in_dat_w, nofColumns=8)))
+
+    ###############################################################################
+    #
+    # Verify data
+    #
+    ###############################################################################
+    tc.append_log(0, 'The Real output ')
+    for i in db_out: 
+        db_re = []  
+        for j in i:                        
+            real = j & 0xFF
+            db_re.append(real)
+        tc.append_log(0, '%s' % str(db_re)) 
+
+    tc.append_log(3, '')
+    tc.append_log(0, 'The Imaginary output ')
+    for i in db_out:                                             
+        db_im = []  
+        for j in i:                        
+            imag = (j & 0xFF00) >> c_in_dat_w
+            db_im.append(imag)
+        tc.append_log(0, '%s' % str(db_im))       
+        
+        
+#        tc.append_log(0, '%s' % str((i & 0xFF00) >> c_in_dat_w)) 
+
+#    bsn.read_bsn_monitor(0)
+#    bsn.read_bsn_monitor(1)
+
+
+  #  for i in range(c_bg_nof_streams): 
+  #      for j in range(tc.nofNodes): 
+  #          for k in range(c_nof_read_back_samples):    
+  #              if db_out_re[i][j*c_nof_read_back_samples + k] != i:
+  #                  tc.append_log(1, 'Error in real part. Expected %d. Received %d', (i,db_out_re[i][j*c_nof_read_back_samples + k]))      
+  #                  tc.set_result('FAILED')
+  #              if j < 4:
+  #                  if db_out_im[i][j*c_nof_read_back_samples + k] != j*2:
+  #                      tc.append_log(1, 'Error in imag part. Expected %d. Received %d', (j*2,db_out_im[i][j*c_nof_read_back_samples + k]))      
+  #                      tc.set_result('FAILED')
+  #              else:
+  #                  if db_out_im[i][j*c_nof_read_back_samples + k] != j*2+1:
+  #                      tc.append_log(1, 'Error in imag part. Expected %d. Received %d', (j*2+1,db_out_im[i][j*c_nof_read_back_samples + k]))          
+  #                      tc.set_result('FAILED')
+
+    ###############################################################################
+    # End
+    tc.set_section_id('')
+    tc.append_log(3, '')
+    tc.append_log(3, '>>>')
+    tc.append_log(0, '>>> Test bench result: %s' % tc.get_result())
+    tc.append_log(3, '>>>')
+    
+    sys.exit(tc.get_result())
+
+
+