diff --git a/_states/neutronv2.py b/_states/neutronv2.py
index b4fd30d..81c8fa4 100644
--- a/_states/neutronv2.py
+++ b/_states/neutronv2.py
@@ -12,7 +12,7 @@
     return __salt__['neutronv2.{}'.format(fname)](*args, **kwargs)
 
 
-def _resource_present(resource, name, changeable_params, cloud_name, **kwargs):
+def _try_get_resource(resource, name, cloud_name):
     try:
         method_name = '{}_get_details'.format(resource)
         exact_resource = _neutronv2_call(
@@ -20,35 +20,58 @@
         )[resource]
     except Exception as e:
         if 'ResourceNotFound' in repr(e):
-            try:
-                method_name = '{}_create'.format(resource)
-                resp = _neutronv2_call(
-                    method_name, name=name, cloud_name=cloud_name, **kwargs
-                )
-            except Exception as e:
-                log.exception('Neutron {0} create failed with {1}'.
-                    format(resource, e))
-                return _failed('create', name, resource)
-            return _succeeded('create', name, resource, resp)
-        elif 'MultipleResourcesFound' in repr(e):
-            return _failed('find', name, resource)
+            return None
         else:
             raise
+    return exact_resource
+
+def _resource_present(resource, resource_name, changeable_params, cloud_name,
+                      **kwargs):
+    exact_resource = None
+    try:
+        exact_resource = _try_get_resource(resource, resource_name, cloud_name)
+        if exact_resource is None:
+            # in case of rename - check if resource was already renamed
+            if kwargs.get('name') is not None and kwargs.get(
+                    'name') != resource_name:
+                exact_resource = _try_get_resource(resource,
+                                                   kwargs.get('name'),
+                                                   cloud_name)
+    except Exception as e:
+        if 'MultipleResourcesFound' in repr(e):
+            return _failed('find', resource_name, resource)
+        else:
+            raise
+    if exact_resource is None:
+        try:
+            method_name = '{}_create'.format(resource)
+            exact_resource_name = kwargs.pop('name', resource_name)
+            resp = _neutronv2_call(
+                method_name, name=exact_resource_name,
+                cloud_name=cloud_name, **kwargs)
+        except Exception as e:
+            log.exception('Neutron {0} create failed with {1}'.
+                format(resource, e))
+            return _failed('create', exact_resource_name, resource)
+        return _succeeded('create', exact_resource_name, resource, resp)
 
     to_update = {}
     for key in kwargs:
         if key in changeable_params and (key not in exact_resource
                 or kwargs[key] != exact_resource[key]):
             to_update[key] = kwargs[key]
-    try:
-        method_name = '{}_update'.format(resource)
-        resp = _neutronv2_call(
-            method_name, name, cloud_name=cloud_name, **to_update
-        )
-    except Exception as e:
-        log.exception('Neutron {0} update failed with {1}'.format(resource, e))
-        return _failed('update', name, resource)
-    return _succeeded('update', name, resource, resp)
+    if to_update:
+        try:
+            method_name = '{}_update'.format(resource)
+            resp = _neutronv2_call(
+                method_name, resource_name, cloud_name=cloud_name, **to_update
+            )
+        except Exception as e:
+            log.exception('Neutron {0} update failed with {1}'.format(resource, e))
+            return _failed('update', resource_name, resource)
+        return _succeeded('update', resource_name, resource, resp)
+    else:
+        return _succeeded('no_changes', resource_name, resource)
 
 
 def _resource_absent(resource, name, cloud_name):
@@ -237,6 +260,17 @@
     return _succeeded('resources_moved', name, 'L3 agent')
 
 
+def port_present(port_name, cloud_name, **kwargs):
+    changeable = (
+        'name', 'description', 'device_id', 'qos_policy',
+        'allowed_address_pair', 'fixed_ip',
+        'device_owner', 'admin_state_up', 'security_group', 'extra_dhcp_opt',
+    )
+
+    return _resource_present('port', port_name, changeable,
+                             cloud_name, **kwargs)
+
+
 def _succeeded(op, name, resource, changes=None):
     msg_map = {
         'create': '{0} {1} created',
