diff --git a/docs/README.md b/docs/README.md
index d9a519a..b8bd80d 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -46,7 +46,7 @@
     - `admin_state`.
     - `oper_status`.
     - `connect_status`.
-- `NNIPort`, `PONPort`, `PONONUPort`, `UNIPort`. These represent various ports attached to OLTs and ONUs.
+- `NNIPort`, `PONPort`, `ANIPort`, `UNIPort`. These represent various ports attached to OLTs and ONUs.
 
 ## Example Tosca
 
diff --git a/xos/synchronizer/migrations/0008_auto_20190520_1814.py b/xos/synchronizer/migrations/0008_auto_20190520_1814.py
new file mode 100644
index 0000000..aeccec2
--- /dev/null
+++ b/xos/synchronizer/migrations/0008_auto_20190520_1814.py
@@ -0,0 +1,65 @@
+# 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.
+
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-05-20 22:14
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('volt', '0007_auto_20190515_1428'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ANIPort_decl',
+            fields=[
+                ('portbase_decl_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='volt.PortBase_decl')),
+                ('onu_device', models.ForeignKey(help_text=b'ONUDevice that owns this ANIPort', on_delete=django.db.models.deletion.CASCADE, related_name='ani_ports', to='volt.ONUDevice_decl')),
+            ],
+            options={
+                'verbose_name': 'ANI Port',
+            },
+            bases=('volt.portbase_decl',),
+        ),
+        migrations.RemoveField(
+            model_name='pononuport_decl',
+            name='onu_device',
+        ),
+        migrations.RemoveField(
+            model_name='pononuport_decl',
+            name='portbase_decl_ptr',
+        ),
+        migrations.DeleteModel(
+            name='PONONUPort',
+        ),
+        migrations.DeleteModel(
+            name='PONONUPort_decl',
+        ),
+        migrations.CreateModel(
+            name='ANIPort',
+            fields=[
+            ],
+            options={
+                'proxy': True,
+                'indexes': [],
+            },
+            bases=('volt.aniport_decl',),
+        ),
+    ]
diff --git a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
index 06101d6..1bd3192 100644
--- a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
@@ -115,7 +115,7 @@
 
     def test_associate_onu(self):
         with patch.object(ServiceInstance.objects, "get") as get_si, \
-            patch.object(ONUDevice.objects, "get") as get_onu:
+             patch.object(ONUDevice.objects, "get") as get_onu:
 
             mock_si = Mock()
             mock_si.get_westbound_service_instance_properties.return_value = "BRCM1234"
@@ -134,6 +134,6 @@
         self.policy.handle_delete(self.si)
         # handle delete does nothing, and should trivially succeed
 
+
 if __name__ == '__main__':
     unittest.main()
-
diff --git a/xos/synchronizer/models/models.py b/xos/synchronizer/models/models.py
index 59b6e66..d02adff 100644
--- a/xos/synchronizer/models/models.py
+++ b/xos/synchronizer/models/models.py
@@ -23,7 +23,7 @@
 from models_decl import PONPort_decl
 from models_decl import NNIPort_decl
 from models_decl import ONUDevice_decl
-from models_decl import PONONUPort_decl
+from models_decl import ANIPort_decl
 from models_decl import UNIPort_decl
 from models_decl import TechnologyProfile_decl
 
@@ -111,7 +111,7 @@
 
         super(ONUDevice, self).delete(*args, **kwargs)
 
-class PONONUPort(PONONUPort_decl):
+class ANIPort(ANIPort_decl):
     class Meta:
         proxy = True
 
diff --git a/xos/synchronizer/models/volt.xproto b/xos/synchronizer/models/volt.xproto
index 25fbaf1..ec06ff1 100644
--- a/xos/synchronizer/models/volt.xproto
+++ b/xos/synchronizer/models/volt.xproto
@@ -201,11 +201,11 @@
         text = True];
 }
 
-message PONONUPort (PortBase) {
+message ANIPort (PortBase) {
     option verbose_name = "ANI Port";
     option description="Access Node Interface Port";
-    required manytoone onu_device->ONUDevice:pononu_ports = 1:1001 [
-        help_text = "ONUDevice that owns this PONONUPort",
+    required manytoone onu_device->ONUDevice:ani_ports = 1:1001 [
+        help_text = "ONUDevice that owns this ANIPort",
         db_index = True];
 }
 
diff --git a/xos/synchronizer/pull_steps/pull_onus.py b/xos/synchronizer/pull_steps/pull_onus.py
index 6920f5c..be04ca9 100644
--- a/xos/synchronizer/pull_steps/pull_onus.py
+++ b/xos/synchronizer/pull_steps/pull_onus.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 from xossynchronizer.pull_steps.pullstep import PullStep
-from xossynchronizer.modelaccessor import model_accessor, ONUDevice, VOLTService, OLTDevice, PONPort, PONONUPort, UNIPort
+from xossynchronizer.modelaccessor import model_accessor, ONUDevice, VOLTService, OLTDevice, PONPort, ANIPort, UNIPort
 
 from xosconfig import Config
 from multistructlog import create_logger
@@ -155,7 +155,7 @@
         pon_onu_ports = [p for p in ports if "PON_ONU" in p["type"]]
 
         self.create_or_update_uni_port(uni_ports, onu)
-        self.create_or_update_pon_onu_port(pon_onu_ports, onu)
+        self.create_or_update_ani_port(pon_onu_ports, onu)
 
     def get_onu_port_id(self, port, onu):
         # find the correct port id as represented in the logical_device
@@ -206,21 +206,21 @@
             update_ports.append(model)
         return update_ports
 
-    def create_or_update_pon_onu_port(self, pon_onu_ports, onu):
+    def create_or_update_ani_port(self, pon_onu_ports, onu):
         update_ports = []
 
         for port in pon_onu_ports:
             try:
-                model = PONONUPort.objects.filter(port_no=port["port_no"], onu_device_id=onu.id)[0]
+                model = ANIPort.objects.filter(port_no=port["port_no"], onu_device_id=onu.id)[0]
                 model.xos_managed = False
-                log.debug("PONONUPort already exists, updating it", port_no=port["port_no"], onu_device_id=onu.id)
+                log.debug("ANIPort already exists, updating it", port_no=port["port_no"], onu_device_id=onu.id)
             except IndexError:
-                model = PONONUPort()
+                model = ANIPort()
                 model.port_no = port["port_no"]
                 model.onu_device_id = onu.id
                 model.name = port["label"]
                 model.xos_managed = False
-                log.debug("PONONUPort is new, creating it", port_no=port["port_no"], onu_device_id=onu.id)
+                log.debug("ANIPort is new, creating it", port_no=port["port_no"], onu_device_id=onu.id)
 
             model.admin_state = port["admin_state"]
             model.oper_status = port["oper_status"]
