diff --git a/jenkins_jobs/modules/properties.py b/jenkins_jobs/modules/properties.py
index 005f59b21..127419012 100644
--- a/jenkins_jobs/modules/properties.py
+++ b/jenkins_jobs/modules/properties.py
@@ -133,8 +133,10 @@ def github(parser, xml_parent, data):
     github = XML.SubElement(xml_parent,
                             'com.coravy.hudson.plugins.github.'
                             'GithubProjectProperty')
-    github_url = XML.SubElement(github, 'projectUrl')
-    github_url.text = data['url']
+    try:
+        XML.SubElement(github, 'projectUrl').text = data['url']
+    except KeyError as e:
+        raise MissingAttributeError(e)
 
 
 def least_load(parser, xml_parent, data):
@@ -185,17 +187,20 @@ def throttle(parser, xml_parent, data):
         data.get('max-total', '0'))
     # TODO: What's "categories"?
     # XML.SubElement(throttle, 'categories')
-    if data.get('enabled', True):
-        XML.SubElement(throttle, 'throttleEnabled').text = 'true'
-    else:
-        XML.SubElement(throttle, 'throttleEnabled').text = 'false'
+    XML.SubElement(throttle, 'throttleEnabled').text = str(
+        data.get('enabled', True)).lower()
     cat = data.get('categories', [])
     if cat:
         cn = XML.SubElement(throttle, 'categories')
         for c in cat:
             XML.SubElement(cn, 'string').text = str(c)
 
-    XML.SubElement(throttle, 'throttleOption').text = data.get('option')
+    options_list = ('category', 'project')
+    option = data.get('option')
+    if option not in options_list:
+        raise InvalidAttributeError('option', option, options_list)
+
+    XML.SubElement(throttle, 'throttleOption').text = option
     XML.SubElement(throttle, 'configVersion').text = '1'
 
     matrixopt = XML.SubElement(throttle, 'matrixOptions')
@@ -372,7 +377,10 @@ def authorization(parser, xml_parent, data):
         for (username, perms) in data.items():
             for perm in perms:
                 pe = XML.SubElement(matrix, 'permission')
-                pe.text = "{0}:{1}".format(mapping[perm], username)
+                try:
+                    pe.text = "{0}:{1}".format(mapping[perm], username)
+                except KeyError:
+                    raise InvalidAttributeError(username, perm, mapping.keys())
 
 
 def extended_choice(parser, xml_parent, data):
@@ -410,8 +418,11 @@ def priority_sorter(parser, xml_parent, data):
     priority_sorter_tag = XML.SubElement(xml_parent,
                                          'hudson.queueSorter.'
                                          'PrioritySorterJobProperty')
-    XML.SubElement(priority_sorter_tag, 'priority').text = str(
-        data['priority'])
+    try:
+        XML.SubElement(priority_sorter_tag, 'priority').text = str(
+            data['priority'])
+    except KeyError as e:
+        raise MissingAttributeError(e)
 
 
 def build_blocker(parser, xml_parent, data):