diff --git a/lib/ansible/modules/cloud/amazon/route53_facts.py b/lib/ansible/modules/cloud/amazon/route53_facts.py
index 58a87a919f5..8af26800830 100644
--- a/lib/ansible/modules/cloud/amazon/route53_facts.py
+++ b/lib/ansible/modules/cloud/amazon/route53_facts.py
@@ -186,6 +186,7 @@ except ImportError:
 
 from ansible.module_utils.basic import AnsibleModule
 from ansible.module_utils.ec2 import boto3_conn, ec2_argument_spec, get_aws_connection_info
+from ansible.module_utils._text import to_native
 
 
 def get_hosted_zone(client, module):
@@ -196,8 +197,7 @@ def get_hosted_zone(client, module):
     else:
         module.fail_json(msg="Hosted Zone Id is required")
 
-    results = client.get_hosted_zone(**params)
-    return results
+    return client.get_hosted_zone(**params)
 
 
 def reusable_delegation_set_details(client, module):
@@ -229,8 +229,7 @@ def list_hosted_zones(client, module):
     if module.params.get('delegation_set_id'):
         params['DelegationSetId'] = module.params.get('delegation_set_id')
 
-    results = client.list_hosted_zones(**params)
-    return results
+    return client.list_hosted_zones(**params)
 
 
 def list_hosted_zones_by_name(client, module):
@@ -245,8 +244,7 @@ def list_hosted_zones_by_name(client, module):
     if module.params.get('max_items'):
         params['MaxItems'] = module.params.get('max_items')
 
-    results = client.list_hosted_zones_by_name(**params)
-    return results
+    return client.list_hosted_zones_by_name(**params)
 
 
 def change_details(client, module):
@@ -262,8 +260,7 @@ def change_details(client, module):
 
 
 def checker_ip_range_details(client, module):
-    results = client.get_checker_ip_ranges()
-    return results
+    return client.get_checker_ip_ranges()
 
 
 def get_count(client, module):
@@ -306,8 +303,7 @@ def get_resource_tags(client, module):
     else:
         params['ResourceType'] = 'hostedzone'
 
-    results = client.list_tags_for_resources(**params)
-    return results
+    return client.list_tags_for_resources(**params)
 
 
 def list_health_checks(client, module):
@@ -319,8 +315,7 @@ def list_health_checks(client, module):
     if module.params.get('next_marker'):
         params['Marker'] = module.params.get('next_marker')
 
-    results = client.list_health_checks(**params)
-    return results
+    return client.list_health_checks(**params)
 
 
 def record_sets_details(client, module):
@@ -342,8 +337,7 @@ def record_sets_details(client, module):
     elif module.params.get('type'):
         params['StartRecordType'] = module.params.get('type')
 
-    results = client.list_resource_record_sets(**params)
-    return results
+    return client.list_resource_record_sets(**params)
 
 
 def health_check_details(client, module):
@@ -425,11 +419,8 @@ def main():
     if not (HAS_BOTO or HAS_BOTO3):
         module.fail_json(msg='json and boto/boto3 is required.')
 
-    try:
-        region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True)
-        route53 = boto3_conn(module, conn_type='client', resource='route53', region=region, endpoint=ec2_url, **aws_connect_kwargs)
-    except boto.exception.NoAuthHandlerFound as e:
-        module.fail_json(msg="Can't authorize connection - %s " % str(e))
+    region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True)
+    route53 = boto3_conn(module, conn_type='client', resource='route53', region=region, endpoint=ec2_url, **aws_connect_kwargs)
 
     invocations = {
         'change': change_details,
@@ -439,7 +430,12 @@ def main():
         'record_sets': record_sets_details,
         'reusable_delegation_set': reusable_delegation_set_details,
     }
-    results = invocations[module.params.get('query')](route53, module)
+
+    results = dict(changed=False)
+    try:
+        results = invocations[module.params.get('query')](route53, module)
+    except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
+        module.fail_json(msg=to_native(e))
 
     module.exit_json(**results)