diff --git a/xos/synchronizer/config.yaml b/xos/synchronizer/config.yaml
new file mode 100644
index 0000000..d85bf30
--- /dev/null
+++ b/xos/synchronizer/config.yaml
@@ -0,0 +1,45 @@
+
+# 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.
+
+
+name: hippie-oss
+accessor:
+  username: xosadmin@opencord.org
+  password: "@/opt/xos/services/hippie-oss/credentials/xosadmin@opencord.org"
+required_models:
+  - HippieOSSService
+  - HippieOSSServiceInstance
+  - RCORDSubscriber
+dependency_graph: "/opt/xos/synchronizers/hippie-oss/model-deps"
+model_policies_dir: "/opt/xos/synchronizers/hippie-oss/model_policies"
+models_dir: "/opt/xos/synchronizers/hippie-oss/models"
+steps_dir: "/opt/xos/synchronizers/hippie-oss/steps"
+
+logging:
+  version: 1
+  handlers:
+    console:
+      class: logging.StreamHandler
+    file:
+      class: logging.handlers.RotatingFileHandler
+      filename: /var/log/xos.log
+      maxBytes: 10485760
+      backupCount: 5
+  loggers:
+    'multistructlog':
+      handlers:
+          - console
+          - file
+      level: DEBUG
diff --git a/xos/synchronizer/hippie-oss-synchronizer.py b/xos/synchronizer/hippie-oss-synchronizer.py
new file mode 100755
index 0000000..46f6219
--- /dev/null
+++ b/xos/synchronizer/hippie-oss-synchronizer.py
@@ -0,0 +1,32 @@
+
+# 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.
+
+
+#!/usr/bin/env python
+
+# This imports and runs ../../xos-observer.py
+
+import importlib
+import os
+import sys
+from xosconfig import Config
+
+config_file = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/config.yaml')
+Config.init(config_file, 'synchronizer-config-schema.yaml')
+
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/new_base")
+sys.path.append(observer_path)
+mod = importlib.import_module("xos-synchronizer")
+mod.main()
diff --git a/xos/synchronizer/model-deps b/xos/synchronizer/model-deps
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/xos/synchronizer/model-deps
@@ -0,0 +1 @@
+{}
diff --git a/xos/synchronizer/model_policies/model_policy_hippieossserviceinstance.py b/xos/synchronizer/model_policies/model_policy_hippieossserviceinstance.py
new file mode 100644
index 0000000..543c0df
--- /dev/null
+++ b/xos/synchronizer/model_policies/model_policy_hippieossserviceinstance.py
@@ -0,0 +1,42 @@
+
+# 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.
+
+
+from synchronizers.new_base.modelaccessor import RCORDSubscriber, model_accessor
+from synchronizers.new_base.policy import Policy
+
+class OSSServiceInstancePolicy(Policy):
+    model_name = "HippieOSSServiceInstance"
+
+    def handle_update(self, si):
+        self.logger.debug("MODEL_POLICY: handle_update for HippieOSSServiceInstance %s " % si.id)
+        if not si.valid:
+            # NOTE we don't do anything if the ONU has not been activated
+            self.logger.debug("MODEL_POLICY: skipping handle_update for HippieOSSServiceInstance %s as valid is %s" % (si.id, si.valid))
+            pass
+        else:
+            self.logger.debug("MODEL_POLICY: creating RCORDSubscriber for HippieOSSServiceInstance %s as valid is %s" % (si.id, si.valid))
+            subscriber = RCORDSubscriber()
+            subscriber.onu_device = si.serial_number
+            subscriber.uni_port_id = si.uni_port_id
+
+            # If the OSS returns a c_tag use that one
+            if si.c_tag:
+                subscriber.c_tag = si.c_tag
+
+            subscriber.save()
+
+    def handle_delete(self, si):
+        pass
diff --git a/xos/synchronizer/models/convenience/hippieossservice.py b/xos/synchronizer/models/convenience/hippieossservice.py
new file mode 100644
index 0000000..356d1f2
--- /dev/null
+++ b/xos/synchronizer/models/convenience/hippieossservice.py
@@ -0,0 +1,48 @@
+
+# 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.
+
+
+# validate_onu received event:
+# {
+#     'status': 'activate',
+#     'serial_number': 'BRCM1234',
+#     'uni_port_id': 'of:00100101',
+#     'of_dpid': 'of:109299321'
+# }
+
+from xosapi.orm import ORMWrapper, register_convenience_wrapper
+from xosapi.convenience.serviceinstance import ORMWrapperServiceInstance
+
+import logging as log
+
+class ORMWrapperHippieOSSService(ORMWrapperServiceInstance):
+
+    def validate_onu(self, event):
+        log.info("validating ONU %s" % event["serial_number"])
+
+        # TODO check if a service instance for this serial_number already exists
+
+        # create an HippieOSSServiceInstance, the validation will be triggered in the corresponding sync step
+        oss_si = self.stub.HippieOSSServiceInstance(
+            serial_number=event["serial_number"],
+            uni_port_id=event["uni_port_id"],
+            of_dpid=event["of_dpid"]
+        )
+        oss_si.save()
+
+
+
+
+register_convenience_wrapper("HippieOSSService", ORMWrapperHippieOSSService)
diff --git a/xos/synchronizer/models/hippie-oss.xproto b/xos/synchronizer/models/hippie-oss.xproto
new file mode 100644
index 0000000..558d8b4
--- /dev/null
+++ b/xos/synchronizer/models/hippie-oss.xproto
@@ -0,0 +1,18 @@
+option name = "hippie-oss";
+option app_label = "hippie-oss";
+
+message HippieOSSService (Service){
+    option verbose_name = "HippieOSS Service";
+    option kind = "OSS";
+}
+
+message HippieOSSServiceInstance (ServiceInstance){
+    option owner_class_name = "HippieOSSService";
+    option verbose_name = "HippieOSS Service Instance";
+
+    required bool valid = 1 [help_text = "Wether this ONU has been validated by the external OSS", default = False, null = False, db_index = False, blank = False];
+    required string serial_number = 2 [max_length = 254, null = False, db_index = False, blank = False, tosca_key=True, unique = True];
+    required int32 uni_port_id = 3 [null = False, db_index = False, blank = False];
+    required string of_dpid = 4 [max_length = 254, null = False, db_index = False, blank = False];
+    optional int32 c_tag = 4 [null = True, db_index = False, blank = False, unique = True, feedback_state = True];
+}
\ No newline at end of file
diff --git a/xos/synchronizer/steps/sync_hippie_oss_service_instance.py b/xos/synchronizer/steps/sync_hippie_oss_service_instance.py
new file mode 100644
index 0000000..197e26c
--- /dev/null
+++ b/xos/synchronizer/steps/sync_hippie_oss_service_instance.py
@@ -0,0 +1,54 @@
+# 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 json
+from synchronizers.new_base.SyncInstanceUsingAnsible import SyncStep
+from synchronizers.new_base.modelaccessor import HippieOSSServiceInstance
+
+from xosconfig import Config
+from multistructlog import create_logger
+
+log = create_logger(Config().get('logging'))
+
+class SyncOSSServiceInstance(SyncStep):
+    provides = [HippieOSSServiceInstance]
+    observes = HippieOSSServiceInstance
+
+    def validate_in_external_oss(self, serial_number):
+        # This is where you may want to call your OSS Database to verify if this ONU can be activated
+        return True
+
+    def get_suscriber_c_tag(self, serial_number):
+        # If it's up to your OSS to generate c_tags, fetch them here
+        # otherwise XOS will generate one for your subscriber
+        return None
+
+    def sync_record(self, o):
+        log.info("synching HippieOSSServiceInstance", object=str(o), **o.tologdict())
+
+        if not self.validate_in_external_oss(o.serial_number):
+            log.error("ONU with serial number %s is not valid in the OSS Database")
+            return
+
+        if self.get_suscriber_c_tag(o.serial_number):
+            self.c_tag = self.get_suscriber_c_tag(o.serial_number)
+
+        o.valid = True
+
+        # FIXME why without this model_policies won't run the handle_update?
+        o.no_sync = True
+        o.save(always_update_timestamp=True)
+
+    def delete_record(self, o):
+        pass
diff --git a/xos/synchronizer/test_config.yaml b/xos/synchronizer/test_config.yaml
new file mode 100644
index 0000000..5a70d2d
--- /dev/null
+++ b/xos/synchronizer/test_config.yaml
@@ -0,0 +1,30 @@
+
+# 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.
+
+
+name: test-hippie-oss-config
+accessor:
+  username: xosadmin@opencord.org
+  password: "sample"
+  kind: "testframework"
+logging:
+  version: 1
+  handlers:
+    console:
+      class: logging.StreamHandler
+  loggers:
+    'multistructlog':
+      handlers:
+          - console
