diff --git a/mwclient/client.py b/mwclient/client.py
index 82d97c72971c25f51c2a567735e3faeeb433fc0e..55278b5cf122d02acf061e8930268e4b5f5d533c 100644
--- a/mwclient/client.py
+++ b/mwclient/client.py
@@ -148,7 +148,7 @@ class Site(object):
 					self.wait(token)
 					continue
 				raise errors.APIError(info['error']['code'],
-					info['error']['info'])
+					info['error']['info'], kwargs)
 			return info
 		
 	@staticmethod
@@ -461,3 +461,17 @@ class Site(object):
 		if allrev: kwargs['wlallrev'] = '1'
 		return listing.List(self, 'watchlist', 'wl', limit = limit, **kwargs)
 		
+	def expandtemplates(self, text, title = None, generatexml = False):
+		self.require(1, 11)
+		
+		kwargs = {}
+		if title is None: kwargs['title'] = title
+		if generatexml: kwargs['generatexml'] = '1'
+		
+		result = self.api('expandtemplates', text = text, **kwargs)
+		
+		if generatexml:
+			return result['expandtemplates']['*'], result['parsetree']['*']
+		else:
+			return result['expandtemplates']['*']
+		
diff --git a/mwclient/errors.py b/mwclient/errors.py
index d996eb227295f25a05201e303c0d57f427c8ec60..297e6b9aa6ad1d005cc4a5dfd8717fd7adc22798 100644
--- a/mwclient/errors.py
+++ b/mwclient/errors.py
@@ -14,10 +14,10 @@ class MaximumRetriesExceeded(MwClientError):
 	pass
 	
 class APIError(MwClientError):
-	def __init__(self, code, info):
+	def __init__(self, code, info, kwargs):
 		self.code = code
 		self.info = info
-		MwClientError.__init__(self, code, info)
+		MwClientError.__init__(self, code, info, kwargs)
 	
 class InsufficientPermission(MwClientError):
 	pass