diff --git a/staffeln/objects/base.py b/staffeln/objects/base.py
index e5a9f06..d300500 100755
--- a/staffeln/objects/base.py
+++ b/staffeln/objects/base.py
@@ -15,7 +15,7 @@
     """Return the mangled name of the attribute's underlying storage."""
     # FIXME(danms): This is just until we use o.vo's class properties
     # and object base.
-    return '_obj_' + name
+    return "_obj_" + name
 
 
 class StaffelnObject(ovoo_base.VersionedObject):
@@ -27,13 +27,12 @@
     necessary "get" classmethod routines as well as "save" object methods
     as appropriate.
     """
-    OBJ_SERIAL_NAMESPACE = 'staffeln_object'
-    OBJ_PROJECT_NAMESPACE = 'staffeln'
+
+    OBJ_SERIAL_NAMESPACE = "staffeln_object"
+    OBJ_PROJECT_NAMESPACE = "staffeln"
 
     def as_dict(self):
-        return {k: getattr(self, k)
-                for k in self.fields
-                if self.obj_attr_is_set(k)}
+        return {k: getattr(self, k) for k in self.fields if self.obj_attr_is_set(k)}
 
 
 class StaffelnObjectSerializer(ovoo_base.VersionedObjectSerializer):
@@ -43,9 +42,9 @@
 
 class StaffelnPersistentObject(object):
     feilds = {
-        'created_at': ovoo_fields.DateTimeField(nullable=True),
-        'updated_at': ovoo_fields.DateTimeField(nullable=True),
-        'deleted_at': ovoo_fields.DateTimeField(nullable=True),
+        "created_at": ovoo_fields.DateTimeField(nullable=True),
+        "updated_at": ovoo_fields.DateTimeField(nullable=True),
+        "deleted_at": ovoo_fields.DateTimeField(nullable=True),
     }
 
     object_fields = {}
@@ -53,7 +52,7 @@
     def obj_refresh(self, loaded_object):
         fields = (field for field in self.feilds if field not in self.object_fields)
         for field in fields:
-            if (self.obj_attr_is_set(field) and self[field] != loaded_object[field]):
+            if self.obj_attr_is_set(field) and self[field] != loaded_object[field]:
                 self[field] = loaded_object[field]
 
     @staticmethod
@@ -76,7 +75,8 @@
             setattr(objects, cls.obj_name(), cls)
         else:
             cur_version = versionutils.convert_version_to_tuple(
-                getattr(objects, cls.obj_name()).VERSION)
+                getattr(objects, cls.obj_name()).VERSION
+            )
             if version >= cur_version:
                 setattr(objects, cls.obj_name(), cls)
 
diff --git a/staffeln/objects/queue.py b/staffeln/objects/queue.py
index b6f9b76..a010e27 100644
--- a/staffeln/objects/queue.py
+++ b/staffeln/objects/queue.py
@@ -5,17 +5,19 @@
 
 
 @base.StaffelnObjectRegistry.register
-class Queue(base.StaffelnPersistentObject, base.StaffelnObject, base.StaffelnObjectDictCompat):
-    VERSION = '1.0'
+class Queue(
+    base.StaffelnPersistentObject, base.StaffelnObject, base.StaffelnObjectDictCompat
+):
+    VERSION = "1.0"
 
     dbapi = db_api.get_instance()
 
     fields = {
-        'id': sfeild.IntegerField(),
-        'backup_id': sfeild.StringField(),
-        'volume_id': sfeild.UUIDField(),
-        'instance_id': sfeild.StringField(),
-        'backup_status': sfeild.IntegerField()
+        "id": sfeild.IntegerField(),
+        "backup_id": sfeild.StringField(),
+        "volume_id": sfeild.UUIDField(),
+        "instance_id": sfeild.StringField(),
+        "backup_status": sfeild.IntegerField(),
     }
 
     @base.remotable_classmethod
@@ -41,6 +43,7 @@
 
     @base.remotable
     def create(self):
+        """Create a :class:`Backup_data` record in the DB"""
         values = self.obj_get_changes()
         db_queue = self.dbapi.create_queue(values)
         self._from_db_object(self, db_queue)
diff --git a/staffeln/objects/volume.py b/staffeln/objects/volume.py
index 8952164..640e144 100644
--- a/staffeln/objects/volume.py
+++ b/staffeln/objects/volume.py
@@ -5,17 +5,19 @@
 
 
 @base.StaffelnObjectRegistry.register
-class Volume(base.StaffelnPersistentObject, base.StaffelnObject, base.StaffelnObjectDictCompat):
-    VERSION = '1.0'
+class Volume(
+    base.StaffelnPersistentObject, base.StaffelnObject, base.StaffelnObjectDictCompat
+):
+    VERSION = "1.0"
 
     dbapi = db_api.get_instance()
 
     fields = {
-        'id': sfeild.IntegerField(),
-        'backup_id': sfeild.StringField(),
-        'instance_id': sfeild.StringField(),
-        'volume_id': sfeild.UUIDField(),
-        'backup_completed': sfeild.IntegerField()
+        "id": sfeild.IntegerField(),
+        "backup_id": sfeild.StringField(),
+        "instance_id": sfeild.StringField(),
+        "volume_id": sfeild.UUIDField(),
+        "backup_completed": sfeild.IntegerField(),
     }
 
     @base.remotable_classmethod
