diff --git a/Tst/testing_library/testlib/tools.py b/Tst/testing_library/testlib/tools.py
index b1104bd27e5385f697c7ecffc450643c4537f8d5..2d7ade68f3d4ad2524274658f552cbbff138ce3d 100644
--- a/Tst/testing_library/testlib/tools.py
+++ b/Tst/testing_library/testlib/tools.py
@@ -394,3 +394,9 @@ def compare_content(data_a, data_b):
         the_same = True
 
     return the_same
+
+
+class TestVars:
+
+    _desc = "This class can be used to define and share variables between test steps"
+
diff --git a/Tst/tst/data_model.py b/Tst/tst/data_model.py
index 91cfdbb20f7af3ada65a72fabd0c4f0eeb990742..0dd1752ec18c797097ddf3fb9434b6ebbd67ae2c 100644
--- a/Tst/tst/data_model.py
+++ b/Tst/tst/data_model.py
@@ -910,6 +910,7 @@ class TestSpecification:
         self._postcon_code = ''
         self._postcon_descr = ''
         self._comment = ''
+        self._custom_imports = ''
         self.sequences = []
 
         if json_data is not None:
@@ -931,6 +932,7 @@ class TestSpecification:
         new_testspec.postcon_code = copy.copy(self.postcon_code)
         new_testspec.postcon_descr = copy.copy(self.postcon_descr)
         new_testspec.comment = copy.copy(self.comment)
+        new_testspec.custom_imports = copy.copy(self.custom_imports)
 
         return new_testspec
 
@@ -1054,6 +1056,15 @@ class TestSpecification:
         assert isinstance(value, str)
         self._comment = value
 
+    @property
+    def custom_imports(self):
+        return self._custom_imports
+
+    @custom_imports.setter
+    def custom_imports(self, value: str):
+        assert isinstance(value, str)
+        self._custom_imports = value
+
     def encode_to_json(self, *args):
         """
         Makes out of the TestSequence a JSON object.
@@ -1079,6 +1090,7 @@ class TestSpecification:
             self.postcon_code = json_data['_postcon_code']
             self.postcon_descr = json_data['_postcon_descr']
             self.comment = json_data['_comment']
+            self.custom_imports = json_data['_custom_imports']
         except KeyError as keyerror:
             self.logger.error('KeyError: no {} could be found in the loaded data'.format(keyerror))
 
diff --git a/Tst/tst/generator.py b/Tst/tst/generator.py
index dee547c4449c8455acf3b5c073de525a6d5e70c0..d9a54a5aaa4bb0be0befb01cfa87d3f16d66e3e8 100644
--- a/Tst/tst/generator.py
+++ b/Tst/tst/generator.py
@@ -93,7 +93,8 @@ def make_command_script(model, model_spec):
         header_template_str = header_file_obj.read()
         header_file_obj.close()
         header_str = string.Template(header_template_str)
-        header = header_str.substitute(testSpecFileName=create_file_name(model_spec.name))
+        header = header_str.substitute(testSpecFileName=create_file_name(model_spec.name),
+                                       customImports=model_spec.custom_imports.strip())
         # add the header string
         content += header
 
@@ -266,8 +267,12 @@ def make_verification_script(model, model_spec):
         header_template_str = header_file_obj.read()
         header_file_obj.close()
 
+        header_str = string.Template(header_template_str)
+        header = header_str.substitute(testSpecFileName=create_file_name(model_spec.name),
+                                       customImports=model_spec.custom_imports.strip())
+
         # add the header string
-        content += header_template_str
+        content += header
 
     # add the class definition
     with open(ver_class_path, 'r') as class_file_obj:
diff --git a/Tst/tst/generator_templates/co_header.py b/Tst/tst/generator_templates/co_header.py
index b61b51380c6db11444f0e1d77b9fa0c14426827c..301967d46a6af2b768ed97416479f15013d87d46 100644
--- a/Tst/tst/generator_templates/co_header.py
+++ b/Tst/tst/generator_templates/co_header.py
@@ -14,6 +14,7 @@ sys.path.append(confignator.get_option('tst-paths', 'testing_library'))
 import ccs_function_lib as cfl
 
 from testlib import tools
+from testlib.tools import TestVars as var
 from testlib import report
 from testlib import tm
 from testlib import tc
@@ -22,6 +23,8 @@ from testlib import precond
 from testlib import testing_logger
 from testlib import sim
 
+${customImports}
+
 import ${testSpecFileName}_verification
 
 # create logger
diff --git a/Tst/tst/generator_templates/co_post_condition.py b/Tst/tst/generator_templates/co_post_condition.py
index f2a70372c8730dc9a7b9a75c5ae0d5ab39d06c0d..3b2901e4b796e655ac6be0ab8b34a561f193a8cc 100644
--- a/Tst/tst/generator_templates/co_post_condition.py
+++ b/Tst/tst/generator_templates/co_post_condition.py
@@ -1,5 +1,5 @@
     # VERIFY EVERY STEP ------------------------------------------------------------------------------------------------
-    def step_verification(self, pool_name, step_start_cuc, param, summary, ver_file, ver_class, ver_func, step_id):
+    def step_verification(self, pool_name, step_start_cuc, param, summary, ver_file, ver_class, ver_func, step_id, cvars):
         """
         This functions does the verification for every step
         :param pool_name: str
@@ -24,7 +24,7 @@
                 ver_instance_call = getattr(ver_file, ver_class)
                 instance = ver_instance_call()
                 ver_func_call = getattr(instance, ver_func)
-                success = ver_func_call(pool_name, start_cuc=step_start_cuc, run_id=self.run_id, step_id=step_id)
+                success = ver_func_call(pool_name, start_cuc=step_start_cuc, run_id=self.run_id, step_id=step_id, cvars=cvars)
                 summary.result = success
             except:
                 logger.exception('Exception in the Verification for Step {}'.format(param['step_no']))
diff --git a/Tst/tst/generator_templates/co_step.py b/Tst/tst/generator_templates/co_step.py
index d1cb1e93c06c24372887a742910d9a7625653e00..ebb276460fce17113a5f1005b52a16993168b61a 100644
--- a/Tst/tst/generator_templates/co_step.py
+++ b/Tst/tst/generator_templates/co_step.py
@@ -24,6 +24,6 @@
 
         summary = self.step_verification(pool_name=pool_name, step_start_cuc=step_start_cuc, param=param, summary=summary,
                                          ver_file=${testSpecFileName}_verification, ver_class="${testSpecClassName}Verification",
-                                         ver_func="step_${testStepNumber}", step_id=step_id)
+                                         ver_func="step_${testStepNumber}", step_id=step_id, cvars=locals())
 
         return summary
diff --git a/Tst/tst/generator_templates/run_header.py b/Tst/tst/generator_templates/run_header.py
index d9540f3b5bd84c31809895e37a07f053069f69f3..739b66c3e2d95810ffc972228286dba9e323ea4e 100644
--- a/Tst/tst/generator_templates/run_header.py
+++ b/Tst/tst/generator_templates/run_header.py
@@ -13,6 +13,7 @@ sys.path.append(ccs_path)
 import ccs_function_lib as cfl
 cfl.add_tst_import_paths()
 from testlib import tools
+from testlib.tools import TestVars as var
 from testlib import report
 from testlib import tm
 from testlib import tc
diff --git a/Tst/tst/generator_templates/ver_header.py b/Tst/tst/generator_templates/ver_header.py
index 20e02a993ca7d993902b85703c658a253c392cde..3232030b555e463a9d256e45522213a6b43c3047 100644
--- a/Tst/tst/generator_templates/ver_header.py
+++ b/Tst/tst/generator_templates/ver_header.py
@@ -2,6 +2,7 @@
 """
 The verification script
 """
+import time
 import logging
 import sys
 import os
@@ -17,6 +18,9 @@ from datetime import datetime
 from testlib import report
 from testlib import analyse_command_log
 from testlib import testing_logger
+from testlib.tools import TestVars as var
+
+${customImports}
 
 # create logger
 logger = logging.getLogger(__name__)
diff --git a/Tst/tst/generator_templates/ver_step.py b/Tst/tst/generator_templates/ver_step.py
index ef34a6a75b35e8bbe1bb65acf57bbda39f6953a2..d21427173dfa51f51c59b49915b66edebf8be3f9 100644
--- a/Tst/tst/generator_templates/ver_step.py
+++ b/Tst/tst/generator_templates/ver_step.py
@@ -1,5 +1,5 @@
     # STEP $testStepNumber --------------------------------------------------------------------------------------------------------
-    def step_$testStepNumber(self, pool_name, start_cuc=None, run_id=None, step_id=None):
+    def step_$testStepNumber(self, pool_name, start_cuc=None, run_id=None, step_id=None, cvars=None):
         testing_logger.ver_log_handler(__name__)
         param = {
             'step_no': '$testStepNumber',
diff --git a/Tst/tst/view.py b/Tst/tst/view.py
index 0903df3efe97e67c91b093d3a7228dc120807a23..d923277430c5c34169857ccb9bea9014912294f7 100644
--- a/Tst/tst/view.py
+++ b/Tst/tst/view.py
@@ -95,7 +95,7 @@ class Board(Gtk.Box):
         self.test_meta_data_box.set_orientation(Gtk.Orientation.HORIZONTAL)
 
         self.test_meta_data_info = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
-        self.test_meta_data_pre_post_con = Gtk.Box()
+        self.test_meta_data_pre_post_con = Gtk.Box(margin_start=10)
         self.test_meta_data_pre_post_con.set_orientation(Gtk.Orientation.VERTICAL)
         self.test_meta_data_pre_post_con_edit = Gtk.Box()
         self.test_meta_data_pre_post_con_edit.set_orientation(Gtk.Orientation.VERTICAL)
@@ -175,9 +175,9 @@ class Board(Gtk.Box):
         self.test_meta_data_pre_post_con.pack_start(precon_line, False, True, 2)
         self.test_meta_data_pre_post_con.pack_start(self.postcon_selection_label, False, True, 2)
         self.test_meta_data_pre_post_con.pack_start(postcon_line, False, True, 0)
-        self.test_meta_data_box.set_spacing(20)
+        self.test_meta_data_box.set_spacing(10)
 
-        self.test_comment_box = Gtk.Box(spacing=2)
+        self.test_comment_box = Gtk.Box(spacing=2, margin_end=5)
         self.test_comment_box.set_orientation(Gtk.Orientation.VERTICAL)
         self.label_comment = Gtk.Label()
         self.label_comment.set_halign(Gtk.Align.START)
@@ -201,6 +201,49 @@ class Board(Gtk.Box):
         self.test_meta_data_box.pack_start(self.test_comment_box, True, True, 0)
         self.pack_start(self.test_meta_data_box, False, True, 0)
 
+        # add a custom init code block
+        self.custom_import_box = Gtk.Box(spacing=5, margin_start=10, margin_end=10)
+        self.custom_import_box.set_orientation(Gtk.Orientation.VERTICAL)
+
+        self.bar_custom_import = Gtk.Box()
+        self.bar_custom_import.set_orientation(Gtk.Orientation.HORIZONTAL)
+        self.bar_custom_import.set_tooltip_text('Statements that are executed at the beginning of a test.\n'
+                                                'Define imports and variables used throughout the test here.')
+        self.label_custom_import = Gtk.Label()
+        self.label_custom_import.set_halign(Gtk.Align.START)
+        self.label_custom_import.set_markup('<b>Init code</b>')
+
+        self.button_custom_import = Gtk.ToolButton()
+        self.button_custom_import.set_icon_name('pan-down-symbolic')
+        self.button_custom_import.connect('clicked', self.on_init_code_toggle)
+
+        self.bar_custom_import.pack_start(self.button_custom_import, False, True, 0)
+        self.bar_custom_import.pack_start(self.label_custom_import, False, True, 0)
+
+        self.custom_import_scrolled_window = Gtk.ScrolledWindow()
+        self.custom_import_scrolled_window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
+        self.custom_import_scrolled_window.set_size_request(-1, 200)
+        self.test_custom_import = GtkSource.View()
+        self.test_custom_import.set_auto_indent(True)
+        self.test_custom_import.set_wrap_mode(Gtk.WrapMode.WORD)
+        self.test_custom_import.set_show_line_numbers(True)
+        self.test_custom_import.set_monospace(True)
+        self.test_custom_import.set_highlight_current_line(True)
+        self.test_custom_import.set_indent_on_tab(True)
+        self.test_custom_import.set_insert_spaces_instead_of_tabs(True)
+        self.test_custom_import.set_indent_width(4)
+        self.test_custom_import.set_auto_indent(True)
+        self.custom_import_buffer = self.test_custom_import.get_buffer()
+
+        self.custom_import_buffer.set_language(lngg)
+        # self.custom_import_buffer.set_style_scheme(self.board.current_scheme)
+        self.custom_import_scrolled_window.add(self.test_custom_import)
+
+        self.custom_import_box.pack_start(self.bar_custom_import, False, False, 0)
+        self.custom_import_box.pack_start(self.custom_import_scrolled_window, True, True, 0)
+
+        self.pack_start(self.custom_import_box, False, True, 0)
+
         # making the toolbar
         self.btn_add_step = Gtk.ToolButton()
         self.btn_add_step.set_label(_('Add step'))
@@ -250,6 +293,7 @@ class Board(Gtk.Box):
         self.test_meta_data_iasw_version.connect('changed', self.on_test_iasw_version_change)
         self.text_meta_data_test_is_locked.connect('toggled', self.on_test_locked_toggled)
         self.test_meta_data_comment.get_buffer().connect('changed', self.on_comment_change)
+        self.custom_import_buffer.connect('changed', self.on_custom_import_change)
 
         Gtk.StyleContext.add_class(self.get_style_context(), 'board')
 
@@ -332,6 +376,17 @@ class Board(Gtk.Box):
         # Set the Locked STep numeration
         self.text_meta_data_test_is_locked.set_active(self.model.primary_counter_locked)
 
+        # Set the init code block
+        self.custom_import_buffer.set_text(self.model.custom_imports)
+
+    def on_init_code_toggle(self, widget):
+        if self.custom_import_scrolled_window.is_visible():
+            self.custom_import_scrolled_window.set_visible(False)
+            widget.set_icon_name('pan-end-symbolic')
+        else:
+            self.custom_import_scrolled_window.set_visible(True)
+            widget.set_icon_name('pan-down-symbolic')
+
     def collapse_all_steps(self, button):
         """ Close all expander of the steps """
         steps = self.grid.get_children()
@@ -509,6 +564,18 @@ class Board(Gtk.Box):
         # update the data model viewer
         self.app.update_model_viewer()
 
+    def on_custom_import_change(self, widget):
+        """
+        update model if buffer changes
+
+        :param widget:
+        :return:
+        """
+
+        custom_code = widget.get_text(widget.get_start_iter(), widget.get_end_iter(), True)
+        self.model.custom_imports = custom_code
+        self.app.update_model_viewer()
+
     def destroy_all_step_widgets(self):
         """
         Destroys all StepWidgets of the current grid