diff --git a/cloud/urls.py b/cloud/urls.py
index 0a11335..4be98ff 100644
--- a/cloud/urls.py
+++ b/cloud/urls.py
@@ -112,4 +112,6 @@ urlpatterns = patterns('',
     url(r'^firewall/vlans/save/$', 'firewall_gui.views.save_vlan'),
     url(r'^firewall/vlangroups/save/$', 'firewall_gui.views.save_vlangroup'),
     url(r'^firewall/hostgroups/save/$', 'firewall_gui.views.save_hostgroup'),
+    url(r'^firewall/domains/save/$', 'firewall_gui.views.save_domain'),
+    url(r'^firewall/records/save/$', 'firewall_gui.views.save_record'),
 )
diff --git a/firewall_gui/views.py b/firewall_gui/views.py
index 4fe99d3..e1fd814 100644
--- a/firewall_gui/views.py
+++ b/firewall_gui/views.py
@@ -618,3 +618,46 @@ def save_hostgroup(request):
         return HttpResponse(json.dumps(errors), content_type='application/json', status=400)
     hostgroup.save()
     return HttpResponse('KTHXBYE')
+
+@user_passes_test(req_staff)
+def save_domain(request):
+    data = json.loads(request.body)
+    if data['id']:
+        domain = get_object_or_404(Domain, id=data['id'])
+    else:
+        domain = Domain.objects.create()
+    errors = {}
+    domain.name = data['name']
+    domain.ttl = data['ttl']
+    domain.description = data['description']
+    set_field(domain, 'owner', errors, username=data['owner']['name'])
+    try:
+        domain.full_clean()
+    except Exception as e:
+        errors = dict(errors.items() + e.message_dict.items())
+    if len(errors) > 0:
+        return HttpResponse(json.dumps(errors), content_type='application/json', status=400)
+    domain.save()
+    return HttpResponse('KTHXBYE')
+
+@user_passes_test(req_staff)
+def save_record(request):
+    data = json.loads(request.body)
+    if data['id']:
+        record = get_object_or_404(Record, id=data['id'])
+    else:
+        record = Record.objects.create()
+    errors = {}
+    record.name = data['name']
+    record.ttl = data['ttl']
+    record.description = data['description']
+    set_field(record, 'owner', errors, username=data['owner']['name'])
+    set_field(record, 'domain', errors, name=data['domain']['name'])
+    try:
+        record.full_clean()
+    except Exception as e:
+        errors = dict(errors.items() + e.message_dict.items())
+    if len(errors) > 0:
+        return HttpResponse(json.dumps(errors), content_type='application/json', status=400)
+    record.save()
+    return HttpResponse('KTHXBYE')