diff --git a/lib/ansible/inventory/host.py b/lib/ansible/inventory/host.py
index 2de190ce1dc..43a96d54bfb 100644
--- a/lib/ansible/inventory/host.py
+++ b/lib/ansible/inventory/host.py
@@ -19,7 +19,6 @@
 from __future__ import (absolute_import, division, print_function)
 __metaclass__ = type
 
-from ansible import constants as C
 from ansible.inventory.group import Group
 from ansible.utils.vars import combine_vars
 
@@ -76,7 +75,7 @@ class Host:
         self.ipv4_address = name
         self.ipv6_address = name
 
-        if port and port != C.DEFAULT_REMOTE_PORT:
+        if port:
             self.set_variable('ansible_ssh_port', int(port))
 
         self._gathered_facts = False
diff --git a/lib/ansible/inventory/ini.py b/lib/ansible/inventory/ini.py
index 8d5f5f052fa..f4762bad2fd 100644
--- a/lib/ansible/inventory/ini.py
+++ b/lib/ansible/inventory/ini.py
@@ -108,7 +108,7 @@ class InventoryParser(object):
                 if len(tokens) == 0:
                     continue
                 hostname = tokens[0]
-                port = C.DEFAULT_REMOTE_PORT
+                port = None
                 # Three cases to check:
                 # 0. A hostname that contains a range pesudo-code and a port
                 # 1. A hostname that contains just a port
diff --git a/lib/ansible/playbook/play_context.py b/lib/ansible/playbook/play_context.py
index fb55c0d6a5f..e94e5d6c865 100644
--- a/lib/ansible/playbook/play_context.py
+++ b/lib/ansible/playbook/play_context.py
@@ -298,6 +298,10 @@ class PlayContext(Base):
                 if variable_name in variables:
                     setattr(new_info, attr, variables[variable_name])
 
+        # make sure we get port defaults if needed
+        if newinfo.port is None and C.DEFAULT_REMOTE_PORT is not None:
+            newinfo.port = int(C.DEFAULT_REMOTE_PORT)
+
         # become legacy updates
         if not new_info.become_pass:
             if new_info.become_method == 'sudo' and new_info.sudo_pass: