diff --git a/SOURCES/bz1827559-fence_vmware_rest-improve-exception-handling.patch b/SOURCES/bz1827559-fence_vmware_rest-improve-exception-handling.patch
new file mode 100644
index 0000000..1c61b35
--- /dev/null
+++ b/SOURCES/bz1827559-fence_vmware_rest-improve-exception-handling.patch
@@ -0,0 +1,44 @@
+From 020f48a309bcad659dc493960d2b39e8e1243085 Mon Sep 17 00:00:00 2001
+From: Thomas Abraham <tabraham@suse.com>
+Date: Mon, 20 Apr 2020 20:28:43 -0400
+Subject: [PATCH] fence_vmware_rest: improve exception handling in
+ send_command()
+
+If an exception occurs, simply raise it. pycurl's perform() method can
+generate a pycurl.error object, which does not support indexing and
+attempting to do so will generate an exception that hides the original
+exception.
+
+Also, don't assume that the remote will return a JSON formatted response.
+If it doesn't, a exception will occur accessing result which will not
+raise the intended exception.
+---
+ agents/vmware_rest/fence_vmware_rest.py | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/agents/vmware_rest/fence_vmware_rest.py b/agents/vmware_rest/fence_vmware_rest.py
+index d07bc10d..1505ffe6 100644
+--- a/agents/vmware_rest/fence_vmware_rest.py
++++ b/agents/vmware_rest/fence_vmware_rest.py
+@@ -124,7 +124,7 @@ def send_command(conn, command, method="GET"):
+ 	try:
+ 		conn.perform()
+ 	except Exception as e:
+-		raise Exception(e[1])
++		raise(e)
+ 
+ 	rc = conn.getinfo(pycurl.HTTP_CODE)
+ 	result = web_buffer.getvalue().decode("UTF-8")
+@@ -135,7 +135,11 @@ def send_command(conn, command, method="GET"):
+ 		result = json.loads(result)
+ 
+ 	if rc != 200:
+-		raise Exception("{}: {}".format(rc, result["value"]["messages"][0]["default_message"]))
++		if len(result) > 0:
++			raise Exception("{}: {}".format(rc, 
++					result["value"]["messages"][0]["default_message"]))
++		else:
++			raise Exception("Remote returned {} for request to {}".format(rc, url))
+ 
+ 	logging.debug("url: {}".format(url))
+ 	logging.debug("method: {}".format(method))
diff --git a/SOURCES/bz1827652-fence_vmware_rest-add-filter-parameter.patch b/SOURCES/bz1827652-fence_vmware_rest-add-filter-parameter.patch
new file mode 100644
index 0000000..2e17f7f
--- /dev/null
+++ b/SOURCES/bz1827652-fence_vmware_rest-add-filter-parameter.patch
@@ -0,0 +1,92 @@
+From ab193580dcdd810b7bef69cc04cebef315f4781d Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Thu, 23 Apr 2020 15:55:11 +0200
+Subject: [PATCH] fence_vmware_rest: add filter parameter
+
+---
+ agents/vmware_rest/fence_vmware_rest.py   | 24 ++++++++++++++++++++---
+ tests/data/metadata/fence_vmware_rest.xml |  9 ++++++++-
+ 2 files changed, 29 insertions(+), 4 deletions(-)
+
+diff --git a/agents/vmware_rest/fence_vmware_rest.py b/agents/vmware_rest/fence_vmware_rest.py
+index 1505ffe6..6daff121 100644
+--- a/agents/vmware_rest/fence_vmware_rest.py
++++ b/agents/vmware_rest/fence_vmware_rest.py
+@@ -42,7 +42,10 @@ def get_list(conn, options):
+ 	outlets = {}
+ 
+ 	try:
+-		res = send_command(conn, "vcenter/vm")
++		command = "vcenter/vm"
++		if "--filter" in options:
++			command = command + "?" + options["--filter"]
++		res = send_command(conn, command)
+ 	except:
+ 		logging.debug("Failed: {}".format(e))
+ 		fail(EC_STATUS)
+@@ -157,6 +160,16 @@ def define_new_opts():
+ 		"required" : "0",
+ 		"shortdesc" : "The path part of the API URL",
+ 		"order" : 2}
++	all_opt["filter"] = {
++		"getopt" : ":",
++		"longopt" : "filter",
++		"help" : "--filter=[filter]              Filter to only return relevant VMs"
++			 " (e.g. \"filter.names=node1&filter.names=node2\").",
++		"default" : "",
++		"required" : "0",
++		"shortdesc" : "Filter to only return relevant VMs. It can be used to avoid "
++			      "the agent failing when more than 1000 VMs should be returned.",
++		"order" : 2}
+ 
+ 
+ def main():
+@@ -169,6 +182,7 @@ def main():
+ 		"notls",
+ 		"web",
+ 		"port",
++		"filter",
+ 	]
+ 
+ 	atexit.register(atexit_handler)
+@@ -181,8 +195,12 @@ def main():
+ 
+ 	docs = {}
+ 	docs["shortdesc"] = "Fence agent for VMware REST API"
+-	docs["longdesc"] = "fence_vmware_rest is an I/O Fencing agent which can be \
+-used with VMware API to fence virtual machines."
++	docs["longdesc"] = """fence_vmware_rest is an I/O Fencing agent which can be \
++used with VMware API to fence virtual machines.
++
++NOTE: If there's more than 1000 VMs there is a filter parameter to work around \
++the API limit. See https://code.vmware.com/apis/62/vcenter-management#/VM%20/get_vcenter_vm \
++for full list of filters."""
+ 	docs["vendorurl"] = "https://www.vmware.com"
+ 	show_docs(options, docs)
+ 
+diff --git a/tests/data/metadata/fence_vmware_rest.xml b/tests/data/metadata/fence_vmware_rest.xml
+index 5b497a6a..d60c8775 100644
+--- a/tests/data/metadata/fence_vmware_rest.xml
++++ b/tests/data/metadata/fence_vmware_rest.xml
+@@ -1,6 +1,8 @@
+ <?xml version="1.0" ?>
+ <resource-agent name="fence_vmware_rest" shortdesc="Fence agent for VMware REST API" >
+-<longdesc>fence_vmware_rest is an I/O Fencing agent which can be used with VMware API to fence virtual machines.</longdesc>
++<longdesc>fence_vmware_rest is an I/O Fencing agent which can be used with VMware API to fence virtual machines.
++
++NOTE: If there's more than 1000 VMs there is a filter parameter to work around the API limit. See https://code.vmware.com/apis/62/vcenter-management#/VM%20/get_vcenter_vm for full list of filters.</longdesc>
+ <vendor-url>https://www.vmware.com</vendor-url>
+ <parameters>
+ 	<parameter name="action" unique="0" required="1">
+@@ -87,6 +89,11 @@
+ 		<getopt mixed="--api-path=[path]" />
+ 		<shortdesc lang="en">The path part of the API URL</shortdesc>
+ 	</parameter>
++	<parameter name="filter" unique="0" required="0">
++		<getopt mixed="--filter=[filter]" />
++		<content type="string" default=""  />
++		<shortdesc lang="en">Filter to only return relevant VMs. It can be used to avoid the agent failing when more than 1000 VMs should be returned.</shortdesc>
++	</parameter>
+ 	<parameter name="quiet" unique="0" required="0">
+ 		<getopt mixed="-q, --quiet" />
+ 		<content type="boolean"  />
diff --git a/SPECS/fence-agents.spec b/SPECS/fence-agents.spec
index 03cb377..06a18a8 100644
--- a/SPECS/fence-agents.spec
+++ b/SPECS/fence-agents.spec
@@ -29,7 +29,7 @@
 Name: fence-agents
 Summary: Set of unified programs capable of host isolation ("fencing")
 Version: 4.2.1
-Release: 44%{?alphatag:.%{alphatag}}%{?dist}
+Release: 45%{?alphatag:.%{alphatag}}%{?dist}
 License: GPLv2+ and LGPLv2+
 Group: System Environment/Base
 URL: https://github.com/ClusterLabs/fence-agents
@@ -98,6 +98,8 @@ Patch56: bz1798641-fence_mpath-fix-reserve-parameter-typo.patch
 Patch57: bz1810457-fence_aws-improve-parameter-logic.patch
 Patch58: bz1816203-fence_aws-1-fix-race-condition.patch
 Patch59: bz1816203-fence_aws-2-fix-python3-encoding.patch
+Patch60: bz1827559-fence_vmware_rest-improve-exception-handling.patch
+Patch61: bz1827652-fence_vmware_rest-add-filter-parameter.patch
 
 %if 0%{?fedora} || 0%{?rhel} > 7
 %global supportedagents amt_ws apc apc_snmp bladecenter brocade cisco_mds cisco_ucs compute drac5 eaton_snmp emerson eps evacuate hpblade ibmblade ifmib ilo ilo_moonshot ilo_mp ilo_ssh intelmodular ipdu ipmilan kdump lpar mpath redfish rhevm rsa rsb sbd scsi vmware_rest vmware_soap wti
@@ -235,6 +237,8 @@ BuildRequires: python3-google-api-client
 %patch57 -p1
 %patch58 -p1
 %patch59 -p1
+%patch60 -p1 -F1
+%patch61 -p1
 
 # prevent compilation of something that won't get used anyway
 sed -i.orig 's|FENCE_ZVM=1|FENCE_ZVM=0|' configure.ac
@@ -1026,6 +1030,12 @@ Fence agent for IBM z/VM over IP.
 %endif
 
 %changelog
+* Tue Apr 28 2020 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-45
+- fence_vmware_rest: improve exception handling
+  Resolves: rhbz#1827559
+- fence_vmware_rest: add filter parameter to avoid 1000 VM API limit
+  Resolves: rhbz#1827652
+
 * Tue Mar 24 2020 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-44
 - fence_aws: fix possible race condition