diff --git a/lib/python/labcomm/LabComm.py b/lib/python/labcomm/LabComm.py
index d702a1c26e000f944850ad00008b5dbc32a216fe..57f70f453f2582b0c6c9b9d9588df2eb50a6f84b 100644
--- a/lib/python/labcomm/LabComm.py
+++ b/lib/python/labcomm/LabComm.py
@@ -759,24 +759,29 @@ class Encoder(Codec):
         self.writer.write(packer.pack(format, *args))
 
     def add_decl(self, decl, index=0):
-        if super(Encoder, self).add_decl(decl, index) and index == 0:
-            decl.encode_decl(self)
-            self.writer.mark()
+        if index == 0:
+            self.writer.mark_begin(decl, None)
+            if super(Encoder, self).add_decl(decl, index):
+                decl.encode_decl(self)
+            self.writer.mark_end(decl, None)
  
     def add_ref(self, decl, index=0):
         ref = sample_ref(name=decl.name, decl=decl.decl, sample=decl)
-        if super(Encoder, self).add_ref(ref, index) and index == 0:
-            ref.encode_decl(self)
-            self.writer.mark()
+        if index == 0:
+            self.writer.mark_begin(decl, None)
+            if super(Encoder, self).add_ref(ref, index):
+                ref.encode_decl(self)
+            self.writer.mark_end(decl, None)
  
     def encode(self, object, decl=None):
         if decl == None:
             name = self.type_to_name[object.__class__]
             decl = self.name_to_decl[name]
+        self.writer.mark_begin(decl, object)
         self.encode_type_number(decl)
         with length_encoder(self) as e:
             decl.encode(e, object)
-        self.writer.mark()
+        self.writer.mark_end(decl, object)
 
     def encode_type_number(self, decl):
         try:
diff --git a/lib/python/labcomm/StreamWriter.py b/lib/python/labcomm/StreamWriter.py
index a85c43d96b9d98de72f4a112720d5e23791df076..2fffc989662653bd2d40c75ea87b86b150edbd97 100644
--- a/lib/python/labcomm/StreamWriter.py
+++ b/lib/python/labcomm/StreamWriter.py
@@ -10,7 +10,10 @@ class StreamWriter:
         self.stream.write(data)
         pass
 
-    def mark(self):
+    def mark_begin(self, decl, value):
+        pass
+
+    def mark_end(self, decl, value):
         self.stream.flush()
         pass