diff --git a/unoptimized_lr/simple_lr_automaton.py b/unoptimized_lr/simple_lr_automaton.py
index 2b68046b05f7bd2ed4307f4e30a2fdd40316b192..8522078cdb49da67bef91ee77262b81dd5555606 100644
--- a/unoptimized_lr/simple_lr_automaton.py
+++ b/unoptimized_lr/simple_lr_automaton.py
@@ -224,7 +224,7 @@ class ParametrizationConstants():
         dummy_signal = Signal(range(longest_serialized_parse_tree))
         self.W_parsetree_index = len(dummy_signal)
 
-        self.W_serialized_tree = max(W_Nonterminal, W_max_RHS, 1 + W_Terminal, 1+ W_parsetree_index)
+        self.W_serialized_parse_tree = max(W_Nonterminal, W_max_RHS, 1 + W_Terminal, 1+ W_parsetree_index)
 
 
 class LR_automaton_internal(Layout):
@@ -242,17 +242,66 @@ class LR_automaton_internal(Layout):
             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"),
+            ("input_stream", InputStream(parameters=parameters)),
 
             # OUTPUTS
-            ("sideband_bus")
+            ("sideband_bus", Sideband(parameters=parameters))
         ]
         if (parameters.generating_tree == True):
-            interfaces.append(("serialization_bus"))
+            interfaces.append(("serialization_bus", Serializer(parameters=parameters)))
         super().__init__(interfaces)