diff --git a/beat/core/message_handler.py b/beat/core/message_handler.py
index d316ad09816887d2507f5c290cce81be43e3eb2f..b715d185326ffdbbe4d3ac5e014066716fc556a4 100755
--- a/beat/core/message_handler.py
+++ b/beat/core/message_handler.py
@@ -81,10 +81,12 @@ class ProxyMessageHandler(MessageHandler):
         return retval
 
 
-    def write(self, name, packed):
+    def write(self, name, end_data_index, packed):
         """Syntax: wrt output data"""
 
-        logger.debug('recv: wrt %s <bin> (size=%d)', name, len(packed))
+        end_data_index = int(end_data_index)
+
+        logger.debug('recv: wrt %s %d <bin> (size=%d)', name, end_data_index, len(packed))
 
         # Get output object
         output_candidate = self._get_output_candidate(name)
@@ -93,7 +95,7 @@ class ProxyMessageHandler(MessageHandler):
 
         data = output_candidate.data_sink.dataformat.type()
         data.unpack(packed)
-        output_candidate.write(data)
+        output_candidate.write(data, end_data_index=end_data_index)
 
         logger.debug('send: ack')
         self.socket.send('ack')
diff --git a/beat/core/test/test_message_handler.py b/beat/core/test/test_message_handler.py
index fa82930ef9a022c533bf3e095e0b3ad99e305b91..a5cbeb59b19afcbb3db7b01e7aa7d3594d5c5401 100644
--- a/beat/core/test/test_message_handler.py
+++ b/beat/core/test/test_message_handler.py
@@ -99,6 +99,90 @@ class TestMessageHandlerBase(unittest.TestCase):
 #----------------------------------------------------------
 
 
+class TestOneInput(TestMessageHandlerBase):
+
+    def setUp(self):
+        dataformat = DataFormat(prefix, 'user/single_integer/1')
+
+        self.create_remote_inputs(
+            DataFormat(prefix, 'user/single_integer/1'),
+            dict(
+                a = MockDataSource([
+                        dataformat.type(value=10),
+                        dataformat.type(value=20),
+                    ],
+                    [
+                        (0, 0),
+                        (1, 1),
+                    ]
+                )
+            )
+        )
+
+        self.remote_input_a = self.remote_input_list['a']
+
+
+    def test_input_has_more_data(self):
+        self.assertTrue(self.remote_input_a.hasMoreData())
+
+
+    def test_input_next(self):
+        self.remote_input_a.next()
+        self.assertEqual(self.remote_input_a.data.value, 10)
+
+
+    def test_input_full_cycle(self):
+        self.assertTrue(self.remote_input_a.hasMoreData())
+        self.remote_input_a.next()
+        self.assertEqual(self.remote_input_a.data.value, 10)
+
+        self.assertTrue(self.remote_input_a.hasDataChanged())
+        self.assertTrue(self.remote_input_a.hasMoreData())
+        self.assertTrue(self.remote_input_a.isDataUnitDone())
+        self.remote_input_a.next()
+        self.assertEqual(self.remote_input_a.data.value, 20)
+
+        self.assertTrue(self.remote_input_a.hasDataChanged())
+        self.assertTrue(not self.remote_input_a.hasMoreData())
+        self.assertTrue(self.remote_input_a.isDataUnitDone())
+
+
+    def test_group_has_more_data(self):
+        self.assertTrue(self.remote_group.hasMoreData())
+
+
+    def test_group_next(self):
+        self.remote_group.next()
+        self.assertEqual(self.remote_input_a.data.value, 10)
+
+        self.assertTrue(self.remote_input_a.hasDataChanged())
+        self.assertTrue(self.remote_input_a.hasMoreData())
+        self.assertTrue(self.remote_input_a.isDataUnitDone())
+
+
+    def test_group_full_cycle(self):
+        self.assertTrue(self.remote_group.hasMoreData())
+        self.remote_group.next()
+        self.assertEqual(self.remote_input_a.data.value, 10)
+
+        self.assertTrue(self.remote_input_a.hasDataChanged())
+        self.assertTrue(self.remote_input_a.hasMoreData())
+        self.assertTrue(self.remote_input_a.isDataUnitDone())
+
+        self.assertTrue(self.remote_group.hasMoreData())
+        self.remote_group.next()
+        self.assertEqual(self.remote_input_a.data.value, 20)
+
+        self.assertTrue(self.remote_input_a.hasDataChanged())
+        self.assertFalse(self.remote_input_a.hasMoreData())
+        self.assertTrue(self.remote_input_a.isDataUnitDone())
+
+        self.assertFalse(self.remote_group.hasMoreData())
+
+
+#----------------------------------------------------------
+
+
 class TestSameFrequencyInputs(TestMessageHandlerBase):
 
     def setUp(self):