diff --git a/unoptimized_lr/simple_lr_automaton.py b/unoptimized_lr/simple_lr_automaton.py
index 8522078cdb49da67bef91ee77262b81dd5555606..3a0b1f242ffdffd8388371fd6c65fe37aa7096b6 100644
--- a/unoptimized_lr/simple_lr_automaton.py
+++ b/unoptimized_lr/simple_lr_automaton.py
@@ -7,6 +7,10 @@ import simple_lr_tables
 import simple_lr_stack
 import simple_parse_tree
 
+import simple_parser_buses
+
+
+
 from functools import reduce
 
 
@@ -184,125 +188,15 @@ from functools import reduce
 #
 
 
+class LRTables():
+    def __init__(self, *, shift_reduce_table, goto_table, reduce_rule_table):
+        self.shift_reduce_table = shift_reduce_table
+        self.goto_table = goto_table
+        self.reduce_rule_table = reduce_rule_table
 
 
-class ParametrizationConstants():
-    def __init__(self, *, number_of_terminals, number_of_nonterminals,
-                          number_of_states, number_of_reduce_rules,
-                          length_of_longest_rule_RHS, maximum_number_of_stack_items,
-                          longest_serialized_parse_tree,
-                          generating_tree):
-        self.number_of_terminals           = number_of_terminals
-        self.number_of_nonterminals        = number_of_nonterminals
-        self.number_of_states              = number_of_states
-        self.number_of_reduce_rules        = number_of_reduce_rules
-        self.length_of_longest_rule_RHS    = length_of_longest_rule_RHS
-        self.maximum_number_of_stack_items = maximum_number_of_stack_items
-        self.longest_serialized_parse_tree = longest_serialized_parse_tree
-        self.generating_tree = generating_tree
-
-        # We calculate the ceil(log_2())'s here all in one go:
-
-        dummy_signal = Signal(range(number_of_terminals))
-        self.W_terminal = len(dummy_signal)
-
-        dummy_signal = Signal(range(number_of_nonterminals))
-        self.W_nonterminal = len(dummy_signal)
-
-        dummy_signal = Signal(range(number_of_states))
-        self.W_state = len(dummy_signal)
-
-        dummy_signal = Signal(range(number_of_reduce_rules))
-        self.W_rule = len(dummy_signal)
-
-        dummy_signal = Signal(range(length_of_longest_rule_RHS))
-        self.W_max_RHS = len(dummy_signal)
-
-        dummy_signal = Signal(range(maximum_number_of_stack_items))
-        self.W_stackdepth = len(dummy_signal)
-
-        dummy_signal = Signal(range(longest_serialized_parse_tree))
-        self.W_parsetree_index = len(dummy_signal)
-
-        self.W_serialized_parse_tree = max(W_Nonterminal, W_max_RHS, 1 + W_Terminal, 1+ W_parsetree_index)
-
-
-class LR_automaton_internal(Layout):
-    def __init__(self, *, parameters):
-        interfaces = [
-            # TABLES
-            ("ShiftReduce_table_bus", simple_lr_tables.ShiftReduceTableBusLayout(parameters=parameters)),
-            ("GOTO_table_bus"       , simple_lr_tables.GOTOTableBusLayout(parameters=parameters)),
-            ("Reduce_table_bus"     , simple_lr_tables.ReduceTableBusLayout(parameters=parameters)),
-
-            # STACKS
-            ("parse_stack_bus"      , simple_lr_stack.StackLayout(data_width=parameters.W_state, index_width=parameters.W_stackdepth))
-        ]
-        if(parameters.generating_tree == True):
-            interfaces.append(("index_stack_bus", simple_lr_stack.StackLayout(data_width=parameters.W_parsetree_index, index_width=parameters.W_stackdepth)))
-        super().__init__(interfaces)
-
-
-class InputStream(Layout):
-    def __init__(self, *, parameters):
-        input_width = parameters.W_terminal
-        super().__init__([
-            # INPUTS
-            ("data_in",     unsigned(input_width)),    # FROM SOURCE
-            ("valid_in",    1),                            # FROM SOURCE
-            ("ready_in",    1),        # FROM DEST
-
-            # OUTPUTS
-            ("valid_out",   1), # TO DEST
-            ("ready_out",   1), # TO SOURCE
-
-        ])
-
-
-class Sideband(Layout):
-    def __init__(self, *, parameters):
-        super().__init__([
-            # INPUTS
-            ("reset_parser",         1),        # FROM SOURCE
-
-            # OUTPUTS
-            ("parser_initialized",   1), # TO SOURCE
-            ("parse_complete_out",   1), # TO DEST
-            ("parse_success",        1), # TO DEST
-            ("parser_fault",         1), # TO DEST
-        ])
-
-
-class Serializer(Layout)
-    def __init__(self, *, parameters):
-        super().__init__([
-            # INPUTS
-            ("valid_in",    1),                            # FROM SOURCE
-            ("ready_in",    1),        # FROM DEST
-
-            # OUTPUTS
-            ("valid_out",   1), # TO DEST
-            ("ready_out",   1), # TO SOURCE
-            ("data_out",    unsigned(parameters.W_serialized_parse_tree)),    # TO DEST
 
-            ("parse_tree_done", 1)
-            ("parse_tree_length",    )
-
-
-        ])
-
-class LR_automaton_external(Layout):
-    def __init__(self, *, parameters):
-        interfaces = [
-            # INPUT
-            ("input_stream", InputStream(parameters=parameters)),
 
-            # OUTPUTS
-            ("sideband_bus", Sideband(parameters=parameters))
-        ]
-        if (parameters.generating_tree == True):
-            interfaces.append(("serialization_bus", Serializer(parameters=parameters)))
-        super().__init__(interfaces)
 
 
 
diff --git a/unoptimized_lr/simple_lr_stack.py b/unoptimized_lr/simple_lr_stack.py
index 577a5005acae08ff8a7a932d0c31b54c6aed8c2d..9665b52855e92625eae945d966f927fe7e5562e7 100644
--- a/unoptimized_lr/simple_lr_stack.py
+++ b/unoptimized_lr/simple_lr_stack.py
@@ -9,30 +9,6 @@ from functools import reduce
 from skidbuffer import RegisteredSkidBuffer
 
 
-class StackLayout(Layout):
-    def __init__(self, *, data_width, index_width):
-        command_width = 3
-        super().__init__([
-            # INPUTS
-            ("command_in",     unsigned(command_width)), # FROM SOURCE
-            ("data_in",        unsigned(data_width)),    # FROM SOURCE
-            ("index_in",       unsigned(index_width)),   # FROM SOURCE
-            ("valid_in",       1),                       # FROM SOURCE
-            ("ready_in",       1),                       # FROM DEST
-
-            # OUTPUTS
-            ("data_out",       unsigned(data_width)),    # TO DEST
-            ("index_out",      unsigned(index_width)),   # TO DEST
-            ("valid_out",      1),                       # TO DEST
-            ("internal_fault", 1),                       # TO DEST
-            ("ready_out",      1),                       # TO SOURCE
-
-        ])
-
-class StackBus(Record):
-    def __init__(self, *, data_width, index_width):
-        super().__init__(StackLayout(data_width=data_width, index_width=index_width))
-
 class Stack(Elaboratable):
     PUSH = 0
     POP  = 1
diff --git a/unoptimized_lr/simple_lr_tables.py b/unoptimized_lr/simple_lr_tables.py
index 1ad8126dd58e6b8e8326ebfb59c38f3f2089ed5d..a1ab4c41ce64576670f2797a8dcee124ac1dca1a 100644
--- a/unoptimized_lr/simple_lr_tables.py
+++ b/unoptimized_lr/simple_lr_tables.py
@@ -24,32 +24,6 @@ from functools import reduce
 
 
 
-class ShiftReduceTableBusLayout(Layout):
-    def __init__(self, *, parameters):
-        row_input_width    =  parameters.W_state
-        column_input_width =  parameters.W_terminal
-        output_width       = (parameters.W_rule + 2)
-
-        super().__init__([
-            # INPUTS
-            ("row_idx",     unsigned(row_input_width)),    # FROM SOURCE
-            ("col_idx",     unsigned(column_input_width)), # FROM SOURCE
-            ("valid_in",    1),                            # FROM SOURCE
-            ("ready_in",    1),        # FROM DEST
-
-            # OUTPUTS
-            ("output_data", unsigned(output_width)), # TO DEST
-            ("valid_out",   1), # TO DEST
-            ("ready_out",   1), # TO SOURCE
-
-        ])
-
-class ShiftReduceTableBus(Record):
-    def __init__(self, *, parameters):
-        super().__init__(TableBusLayout(parameters=parameters))
-
-
-
 class ShiftReduceTable(Elaboratable):
     def __init__(self, *, lang_params, input_array):
         # Parameters
@@ -118,30 +92,6 @@ class ShiftReduceTable(Elaboratable):
         return m
 
 
-class GOTOTableBusLayout(Layout):
-    def __init__(self, *, parameters):
-
-        row_input_width    =  parameters.W_state
-        column_input_width =  parameters.W_nonterminal
-        output_width       = (parameters.W_nonterminal + 1)
-
-        super().__init__([
-            # INPUTS
-            ("row_idx",     unsigned(row_input_width)),    # FROM SOURCE
-            ("col_idx",     unsigned(column_input_width)), # FROM SOURCE
-            ("valid_in",    1),                            # FROM SOURCE
-            ("ready_in",    1),        # FROM DEST
-
-            # OUTPUTS
-            ("output_data", unsigned(output_width)), # TO DEST
-            ("valid_out",   1), # TO DEST
-            ("ready_out",   1), # TO SOURCE
-
-        ])
-
-class GOTOTableBus(Record):
-    def __init__(self, *, parameters):
-        super().__init__(TableBusLayout(parameters=parameters))
 
 class GOTOtable(Elaboratable):
     def __init__(self, *,  lang_params, input_array):
@@ -219,31 +169,6 @@ class GOTOtable(Elaboratable):
 
 
 
-
-
-class ReduceTableBusLayout(Layout):
-    def __init__(self, *, parameters):
-        output_width    = (parameters.W_max_RHS + parameters.W_nonterminal)
-        row_input_width = parameters.W_rule
-
-        super().__init__([
-            # INPUTS
-            ("row_idx",     unsigned(row_input_width)),    # FROM SOURCE
-            ("valid_in",    1),                            # FROM SOURCE
-            ("ready_in",    1),        # FROM DEST
-
-            # OUTPUTS
-            ("output_data", unsigned(output_width)), # TO DEST
-            ("valid_out",   1), # TO DEST
-            ("ready_out",   1), # TO SOURCE
-
-        ])
-
-class ReduceTableBus(Record):
-    def __init__(self, *, parameters):
-        super().__init__(OneDimensionTableBusLayout(parameters=parameters))
-
-
 class ReduceRuleTable(Elaboratable):
     def __init__(self, *, lang_params, input_array):
         # Parameters
diff --git a/unoptimized_lr/simple_parser_buses.py b/unoptimized_lr/simple_parser_buses.py
new file mode 100644
index 0000000000000000000000000000000000000000..baab9117415c3a4a7a14773fb38510b4dfd09833
--- /dev/null
+++ b/unoptimized_lr/simple_parser_buses.py
@@ -0,0 +1,228 @@
+from nmigen import *
+from nmigen.hdl.rec import *
+from nmigen.cli import main
+
+import rtl_lib
+
+from functools import reduce
+
+class ParametrizationConstants():
+    def __init__(self, *, number_of_terminals, number_of_nonterminals,
+                          number_of_states, number_of_reduce_rules,
+                          length_of_longest_rule_RHS, maximum_number_of_stack_items,
+                          longest_serialized_parse_tree,
+                          generating_tree):
+        self.number_of_terminals           = number_of_terminals
+        self.number_of_nonterminals        = number_of_nonterminals
+        self.number_of_states              = number_of_states
+        self.number_of_reduce_rules        = number_of_reduce_rules
+        self.length_of_longest_rule_RHS    = length_of_longest_rule_RHS
+        self.maximum_number_of_stack_items = maximum_number_of_stack_items
+        self.longest_serialized_parse_tree = longest_serialized_parse_tree
+        self.generating_tree = generating_tree
+
+        # We calculate the ceil(log_2())'s here all in one go:
+
+        dummy_signal = Signal(range(number_of_terminals))
+        self.W_terminal = len(dummy_signal)
+
+        dummy_signal = Signal(range(number_of_nonterminals))
+        self.W_nonterminal = len(dummy_signal)
+
+        dummy_signal = Signal(range(number_of_states))
+        self.W_state = len(dummy_signal)
+
+        dummy_signal = Signal(range(number_of_reduce_rules))
+        self.W_rule = len(dummy_signal)
+
+        dummy_signal = Signal(range(length_of_longest_rule_RHS))
+        self.W_max_RHS = len(dummy_signal)
+
+        dummy_signal = Signal(range(maximum_number_of_stack_items))
+        self.W_stackdepth = len(dummy_signal)
+
+        dummy_signal = Signal(range(longest_serialized_parse_tree))
+        self.W_parsetree_index = len(dummy_signal)
+
+        self.W_serialized_parse_tree = max(W_Nonterminal, W_max_RHS, 1 + W_Terminal, 1+ W_parsetree_index)
+
+
+class LR_automaton_internal(Layout):
+    def __init__(self, *, parameters):
+        interfaces = [
+            # TABLES
+            ("ShiftReduce_table_bus", ShiftReduceTableBusLayout(parameters=parameters)),
+            ("GOTO_table_bus"       , GOTOTableBusLayout(parameters=parameters)),
+            ("Reduce_table_bus"     , ReduceTableBusLayout(parameters=parameters)),
+
+            # STACKS
+            ("parse_stack_bus"      , StackLayout(data_width=parameters.W_state, index_width=parameters.W_stackdepth))
+        ]
+        if(parameters.generating_tree == True):
+            interfaces.append(("index_stack_bus", StackLayout(data_width=parameters.W_parsetree_index, index_width=parameters.W_stackdepth)))
+        super().__init__(interfaces)
+
+
+class InputStream(Layout):
+    def __init__(self, *, parameters):
+        input_width = parameters.W_terminal
+        super().__init__([
+            # INPUTS
+            ("data_in",     unsigned(input_width)),    # FROM SOURCE
+            ("valid_in",    1),                            # FROM SOURCE
+            ("ready_in",    1),        # FROM DEST
+
+            # OUTPUTS
+            ("valid_out",   1), # TO DEST
+            ("ready_out",   1), # TO SOURCE
+
+        ])
+
+
+class Sideband(Layout):
+    def __init__(self, *, parameters):
+        super().__init__([
+            # INPUTS
+            ("reset_parser",         1),        # FROM SOURCE
+
+            # OUTPUTS
+            ("parser_initialized",   1), # TO SOURCE
+            ("parse_complete_out",   1), # TO DEST
+            ("parse_success",        1), # TO DEST
+            ("parser_fault",         1), # TO DEST
+        ])
+
+
+class Serializer(Layout):
+    def __init__(self, *, parameters):
+        super().__init__([
+            # INPUTS
+            ("valid_in",    1),                            # FROM SOURCE
+            ("ready_in",    1),        # FROM DEST
+
+            # OUTPUTS
+            ("valid_out",   1), # TO DEST
+            ("ready_out",   1), # TO SOURCE
+            ("data_out",    unsigned(parameters.W_serialized_parse_tree)),    # TO DEST
+
+            ("parse_tree_done", 1),
+            ("parse_tree_length",    )
+
+
+        ])
+
+class LR_automaton_external(Layout):
+    def __init__(self, *, parameters):
+        interfaces = [
+            # INPUT
+            ("input_stream", InputStream(parameters=parameters)),
+
+            # OUTPUTS
+            ("sideband_bus", Sideband(parameters=parameters))
+        ]
+        if (parameters.generating_tree == True):
+            interfaces.append(("serialization_bus", Serializer(parameters=parameters)))
+        super().__init__(interfaces)
+
+
+
+class StackLayout(Layout):
+    def __init__(self, *, data_width, index_width):
+        command_width = 3
+        super().__init__([
+            # INPUTS
+            ("command_in",     unsigned(command_width)), # FROM SOURCE
+            ("data_in",        unsigned(data_width)),    # FROM SOURCE
+            ("index_in",       unsigned(index_width)),   # FROM SOURCE
+            ("valid_in",       1),                       # FROM SOURCE
+            ("ready_in",       1),                       # FROM DEST
+
+            # OUTPUTS
+            ("data_out",       unsigned(data_width)),    # TO DEST
+            ("index_out",      unsigned(index_width)),   # TO DEST
+            ("valid_out",      1),                       # TO DEST
+            ("internal_fault", 1),                       # TO DEST
+            ("ready_out",      1),                       # TO SOURCE
+
+        ])
+
+class StackBus(Record):
+    def __init__(self, *, data_width, index_width):
+        super().__init__(StackLayout(data_width=data_width, index_width=index_width))
+
+
+
+class ShiftReduceTableBusLayout(Layout):
+    def __init__(self, *, parameters):
+        row_input_width    =  parameters.W_state
+        column_input_width =  parameters.W_terminal
+        output_width       = (parameters.W_rule + 2)
+
+        super().__init__([
+            # INPUTS
+            ("row_idx",     unsigned(row_input_width)),    # FROM SOURCE
+            ("col_idx",     unsigned(column_input_width)), # FROM SOURCE
+            ("valid_in",    1),                            # FROM SOURCE
+            ("ready_in",    1),        # FROM DEST
+
+            # OUTPUTS
+            ("output_data", unsigned(output_width)), # TO DEST
+            ("valid_out",   1), # TO DEST
+            ("ready_out",   1), # TO SOURCE
+
+        ])
+
+class ShiftReduceTableBus(Record):
+    def __init__(self, *, parameters):
+        super().__init__(TableBusLayout(parameters=parameters))
+
+
+
+class GOTOTableBusLayout(Layout):
+    def __init__(self, *, parameters):
+
+        row_input_width    =  parameters.W_state
+        column_input_width =  parameters.W_nonterminal
+        output_width       = (parameters.W_nonterminal + 1)
+
+        super().__init__([
+            # INPUTS
+            ("row_idx",     unsigned(row_input_width)),    # FROM SOURCE
+            ("col_idx",     unsigned(column_input_width)), # FROM SOURCE
+            ("valid_in",    1),                            # FROM SOURCE
+            ("ready_in",    1),        # FROM DEST
+
+            # OUTPUTS
+            ("output_data", unsigned(output_width)), # TO DEST
+            ("valid_out",   1), # TO DEST
+            ("ready_out",   1), # TO SOURCE
+
+        ])
+
+class GOTOTableBus(Record):
+    def __init__(self, *, parameters):
+        super().__init__(TableBusLayout(parameters=parameters))
+
+
+
+class ReduceTableBusLayout(Layout):
+    def __init__(self, *, parameters):
+        output_width    = (parameters.W_max_RHS + parameters.W_nonterminal)
+        row_input_width = parameters.W_rule
+
+        super().__init__([
+            # INPUTS
+            ("row_idx",     unsigned(row_input_width)),    # FROM SOURCE
+            ("valid_in",    1),                            # FROM SOURCE
+            ("ready_in",    1),        # FROM DEST
+
+            # OUTPUTS
+            ("output_data", unsigned(output_width)), # TO DEST
+            ("valid_out",   1), # TO DEST
+            ("ready_out",   1), # TO SOURCE
+
+        ])
+
+class ReduceTableBus(Record):
+    def __init__(self, *, parameters):
+        super().__init__(OneDimensionTableBusLayout(parameters=parameters))