diff --git a/xos/synchronizer/models/models.py b/xos/synchronizer/models/models.py
index dd6c57f..34aff50 100644
--- a/xos/synchronizer/models/models.py
+++ b/xos/synchronizer/models/models.py
@@ -14,6 +14,7 @@
 # limitations under the License.
 import re
 import socket
+import random
 
 from xos.exceptions import XOSValidationError, XOSProgrammingError, XOSPermissionDenied
 from models_decl import RCORDService_decl, RCORDSubscriber_decl
@@ -40,7 +41,19 @@
                 inner_service_instance = link.provider_service_instance
                 inner_service_instance.save(update_fields=["updated"])
 
+    def generate_tag(self):
+        # NOTE this method will loop if available c_tags are ended
+        tag = random.randint(16, 4096)
+        if tag in self.get_used_c_tags():
+            return self.generate_tag()
+        return tag
+
+    def get_used_c_tags(self):
+        same_onu_subscribers = RCORDSubscriber.objects.filter(onu_device=self.onu_device)
+        return [s.c_tag for s in same_onu_subscribers]
+
     def save(self, *args, **kwargs):
+
         self.validate_unique_service_specific_id(none_okay=True)
 
         # VSGServiceInstance will extract the creator from the Subscriber, as it needs a creator to create its
@@ -67,9 +80,18 @@
             if not re.match("[0-9a-f]{2}([-:]?)[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$", self.mac_address.lower()):
                 raise XOSValidationError("The mac_address you specified (%s) is not valid" % self.mac_address)
 
+        # validate c_tag
+        if hasattr(self, 'c_tag') and self.c_tag is not None:
+            if self.c_tag in self.get_used_c_tags():
+                raise XOSValidationError("The c_tag you specified (%s) has already been used on device %s" % (self.c_tag, self.onu_device))
+
+        if not hasattr(self, "c_tag") or self.c_tag is None:
+            self.c_tag = self.generate_tag()
+
         self.set_owner()
 
         if hasattr(self.owner.leaf_model, "access") and self.owner.leaf_model.access == "voltha":
+
             # if the access network is managed by voltha, validate that onu_device actually exist
             volt_service = self.owner.provider_services[0].leaf_model # we assume RCORDService is connected only to the vOLTService
 
diff --git a/xos/synchronizer/models/rcord.xproto b/xos/synchronizer/models/rcord.xproto
index 122b80c..9b4deb2 100644
--- a/xos/synchronizer/models/rcord.xproto
+++ b/xos/synchronizer/models/rcord.xproto
@@ -12,21 +12,23 @@
     option verbose_name = "RCORD Subscriber";
     option owner_class_name = "RCORDService";
 
-    required bool firewall_enable = 1 [default = False, null = False, db_index = False, blank = True];
-    optional string firewall_rules = 2 [default = "accept all anywhere anywhere", null = True, db_index = False, blank = True];
-    required bool url_filter_enable = 3 [default = False, null = False, db_index = False, blank = True];
-    optional string url_filter_rules = 4 [default = "allow all", null = True, db_index = False, blank = True];
-    required string url_filter_level = 5 [default = "PG", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
-    required bool cdn_enable = 6 [default = False, null = False, db_index = False, blank = True];
-    required bool is_demo_user = 7 [default = False, null = False, db_index = False, blank = True];
-    required int32 uplink_speed = 8 [default = 1000000000, null = False, db_index = False, blank = False];
-    required int32 downlink_speed = 9 [default = 1000000000, null = False, db_index = False, blank = False];
-    required bool enable_uverse = 10 [default = True, null = False, db_index = False, blank = True];
-    required string status = 11 [default = "enabled", choices = "(('enabled', 'Enabled'), ('suspended', 'Suspended'), ('delinquent', 'Delinquent'), ('copyrightviolation', 'Copyright Violation'))", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
-    optional int32 c_tag = 12 [null = True, db_index = False, blank = False];
-    required string onu_device = 13 [help_text = "ONUDevice serial number", null = False, db_index = False, blank = False, unique = True];
+    // vsg related configurations
     optional manytoone creator->User:created_rcord_subscribers = 15 [db_index = True, null = True, blank = True];
+    optional bool firewall_enable = 1 [default = False, null = False, db_index = False, blank = True];
+    optional string firewall_rules = 2 [default = "accept all anywhere anywhere", null = True, db_index = False, blank = True];
+    optional bool url_filter_enable = 3 [default = False, null = False, db_index = False, blank = True];
+    optional string url_filter_rules = 4 [default = "allow all", null = True, db_index = False, blank = True];
+    optional string url_filter_level = 5 [default = "PG", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
+    optional bool cdn_enable = 6 [default = False, null = False, db_index = False, blank = True];
+    optional bool is_demo_user = 7 [default = False, null = False, db_index = False, blank = True];
+    optional int32 uplink_speed = 8 [default = 1000000000, null = False, db_index = False, blank = False];
+    optional int32 downlink_speed = 9 [default = 1000000000, null = False, db_index = False, blank = False];
+    optional bool enable_uverse = 10 [default = True, null = False, db_index = False, blank = True];
+    optional string status = 11 [default = "enabled", choices = "(('enabled', 'Enabled'), ('suspended', 'Suspended'), ('delinquent', 'Delinquent'), ('copyrightviolation', 'Copyright Violation'))", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
 
+    // parameters for r-cord lite
+    optional int32 c_tag = 12 [null = True, db_index = False, blank = False];
+    required string onu_device = 13 [help_text = "ONUDevice serial number", null = False, db_index = False, blank = False];
     optional int32 uni_port_id = 16 [help_text = "UNI PORT ID in VOLTHA", null = True, db_index = False, blank = False];
     optional string ip_address = 17 [help_text = "Subscriber IP Address", null = True, db_index = False, blank = False];
     optional string mac_address = 18 [null = True, db_index = False, blank = False];
diff --git a/xos/synchronizer/models/test_models.py b/xos/synchronizer/models/test_models.py
new file mode 100644
index 0000000..bb2a469
--- /dev/null
+++ b/xos/synchronizer/models/test_models.py
@@ -0,0 +1,128 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import unittest
+from mock import patch, Mock, MagicMock
+
+# mocking XOS exception, as they're based in Django
+class Exceptions:
+    XOSValidationError = Exception
+    XOSProgrammingError = Exception
+    XOSPermissionDenied = Exception
+
+class XOS:
+    exceptions = Exceptions
+
+class TestRCORDModels(unittest.TestCase):
+    def setUp(self):
+        self.xos = XOS
+
+        self.models_decl = Mock()
+        self.models_decl.RCORDSubscriber_decl = MagicMock
+        self.models_decl.RCORDSubscriber_decl.save = Mock()
+        self.models_decl.RCORDSubscriber_decl.objects = Mock()
+        self.models_decl.RCORDSubscriber_decl.objects.filter.return_value = []
+
+
+        modules = {
+            'xos.exceptions': self.xos.exceptions,
+            'models_decl': self.models_decl
+        }
+
+        self.module_patcher = patch.dict('sys.modules', modules)
+        self.module_patcher.start()
+
+        self.volt = Mock()
+
+        from models import RCORDSubscriber
+
+        self.rcord_subscriber_class = RCORDSubscriber
+
+        self.rcord_subscriber = RCORDSubscriber()
+        self.rcord_subscriber.onu_device = "BRCM1234"
+        self.rcord_subscriber.c_tag = "111"
+        self.rcord_subscriber.ip_address = "1.1.1.1"
+        self.rcord_subscriber.mac_address = "00:AA:00:00:00:01"
+        self.rcord_subscriber.owner.leaf_model.access = "voltha"
+        self.rcord_subscriber.owner.provider_services = [self.volt]
+
+
+    def test_save(self):
+        self.rcord_subscriber.save()
+        self.models_decl.RCORDSubscriber_decl.save.assert_called()
+
+    def test_validate_ip_address(self):
+        self.rcord_subscriber.ip_address = "invalid"
+        with self.assertRaises(Exception) as e:
+            self.rcord_subscriber.save()
+
+        self.assertEqual(e.exception.message, "The ip_address you specified (invalid) is not valid")
+        self.models_decl.RCORDSubscriber_decl.save.assert_not_called()
+
+    def test_validate_mac_address(self):
+        self.rcord_subscriber.mac_address = "invalid"
+        with self.assertRaises(Exception) as e:
+            self.rcord_subscriber.save()
+
+        self.assertEqual(e.exception.message, "The mac_address you specified (invalid) is not valid")
+        self.models_decl.RCORDSubscriber_decl.save.assert_not_called()
+
+    def test_valid_onu_device(self):
+        self.rcord_subscriber.save()
+        self.models_decl.RCORDSubscriber_decl.save.assert_called()
+
+    def test_invalid_onu_device(self):
+        self.volt.leaf_model.has_access_device.return_value = False
+        with self.assertRaises(Exception) as e:
+            self.rcord_subscriber.save()
+
+        self.assertEqual(e.exception.message, "The onu_device you specified (BRCM1234) does not exists")
+        self.models_decl.RCORDSubscriber_decl.save.assert_not_called()
+
+    def test_validate_c_tag(self):
+        """
+        check that other subscriber attached to the same ONU don't have the same c_tag
+        """
+
+        s = Mock()
+        s.c_tag = "111"
+        s.onu_device = "BRCM1234"
+
+        self.models_decl.RCORDSubscriber_decl.objects.filter.return_value = [s]
+
+        with self.assertRaises(Exception) as e:
+            self.rcord_subscriber.save()
+
+        self.assertEqual(e.exception.message, "The c_tag you specified (111) has already been used on device BRCM1234")
+        self.models_decl.RCORDSubscriber_decl.save.assert_not_called()
+
+
+    def test_generate_c_tag(self):
+        s = Mock()
+        s.c_tag = "111"
+        s.onu_device = "BRCM1234"
+
+        self.models_decl.RCORDSubscriber_decl.objects.filter.return_value = [s]
+        self.rcord_subscriber.c_tag = None
+
+        self.rcord_subscriber.save()
+
+        self.models_decl.RCORDSubscriber_decl.save.assert_called()
+        self.assertNotEquals(self.rcord_subscriber.c_tag, "111")
+        self.assertGreater(self.rcord_subscriber.c_tag, 16)
+        self.assertLess(self.rcord_subscriber.c_tag, 4097)
+
+
+if __name__ == '__main__':
+    unittest.main()
