diff --git a/requirements.txt b/requirements.txt
index dc53a3c..1b57644 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -11,10 +11,8 @@
 oslo.config>=8.1.0
 oslo.log>=4.4.0 # Apache-2.0
 oslo_versionedobjects
-oslo.utils>=3.40.0 # Apache-2.0
 openstacksdk>0.28.0
 pymysql
 parse
-tooz>=2.7.1 # Apache-2.0
 # email
-# smtplib
+# smtplib
\ No newline at end of file
diff --git a/staffeln/common/constants.py b/staffeln/common/constants.py
index 4eea22e..6b60ef5 100644
--- a/staffeln/common/constants.py
+++ b/staffeln/common/constants.py
@@ -1,4 +1,3 @@
-BACKUP_FAILED = 3
 BACKUP_COMPLETED = 2
 BACKUP_WIP = 1
 BACKUP_PLANNED = 0
diff --git a/staffeln/common/lock.py b/staffeln/common/lock.py
deleted file mode 100644
index 338ff37..0000000
--- a/staffeln/common/lock.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from oslo_utils import uuidutils
-from tooz import coordination
-import staffeln.conf
-
-CONF = staffeln.conf.CONF
-
-
-class LockManager(object):
-    def __init__(self, node_id=None):
-        self.db_url = CONF.database.connection
-        self.node_id = (
-            uuidutils.generate_uuid() if node_id is None else node_id
-        )
-        # get_coordinator(backend_url, member_id)
-        self.coordinator = coordination.get_coordinator(self.db_url, node_id)
-
-    def __enter__(self):
-        self.coordinator.start()
-        return self
-
-    def __exit__(self, exc_type, exc_val, exc_tb):
-        self.coordinator.stop()
diff --git a/staffeln/common/node_manage.py b/staffeln/common/node_manage.py
deleted file mode 100644
index 16a2575..0000000
--- a/staffeln/common/node_manage.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from datetime import datetime, timezone
-
-from oslo_utils import uuidutils
-
-import staffeln.conf
-from staffeln.objects import puller
-
-CONF = staffeln.conf.CONF
-
-
-class Puller(object):
-    def __init__(self, context, node_id=None):
-        self.ctx = context
-
-        self.node_id = (
-            uuidutils.generate_uuid() if node_id is None else node_id
-        )
-        self.puller = None
-
-    def fetch_puller_role(self):
-        target_puller = puller.Puller.get(context=self.ctx)
-
-        # No puller, run for puller role
-        if not target_puller:
-            self.puller = puller.Puller(self.ctx)
-            self.puller.node_id = self.node_id
-            self.puller.updated_at = datetime.now(timezone.utc)
-            self.puller.create()
-            return True
-        # If puller expired, run for new puller role
-        elif self.is_old_puller(target_puller):
-            self.puller = puller.Puller(self.ctx)
-            self.puller.node_id = self.node_id
-            self.puller.updated_at = datetime.now(timezone.utc)
-            self.puller.save()
-            return True
-        else:
-            return False
-
-        self.puller = puller.Puller.get(context=self.ctx)
-        # Return True if this new puller's node_id is this node.
-        return self.puller.node_id == self.node_id
-
-    def is_old_puller(self, target_puller):
-        valid_period = CONF.conductor.backup_service_period * 2
-        # Check if puller have not been update for more than two
-        # backup_service_period.
-        return True if (
-            datetime.now(timezone.utc) - target_puller.updated_at
-        ).total_seconds() > valid_period else False
-
-    def renew_update_time(self):
-        if self.puller is None:
-            return
-        self.puller = puller.Puller.get(context=self.ctx)
-
-        if self.puller.node_id == self.node_id:
-            self.puller.updated_at = datetime.now(timezone.utc)
-            self.puller.save()
diff --git a/staffeln/conductor/backup.py b/staffeln/conductor/backup.py
index 309822e..fcd39bf 100755
--- a/staffeln/conductor/backup.py
+++ b/staffeln/conductor/backup.py
@@ -122,28 +122,12 @@
                     % (volume_id, volume["status"])
                 )
                 LOG.info(reason)
-                return reason
+                self.result.add_failed_backup(project_id, volume_id, reason)
             return res
 
         except OpenstackResourceNotFound:
             return False
 
-    def purge_backups(self):
-        #TODO make all this in a single DB command
-        success_tasks = self.get_queues(
-            filters={"backup_status": constants.BACKUP_COMPLETED}
-        )
-        failed_tasks = self.get_queues(
-            filters={"backup_status": constants.BACKUP_FAILED}
-        )
-        for queue in success_tasks:
-            LOG.info("Start purge completed tasks.")
-            queue.delete_queue()
-
-        for queue in failed_tasks:
-            LOG.info("Start purge failed tasks.")
-            queue.delete_queue()
-
     #  delete all backups forcily regardless of the status
     def hard_cancel_backup_task(self, task):
         try:
@@ -158,16 +142,15 @@
             if backup is None:
                 return task.delete_queue()
             self.openstacksdk.delete_backup(task.backup_id, force=True)
-            task.reason = reason
-            task.backup_status = constants.BACKUP_FAILED
-            task.save()
+            task.delete_queue()
+            self.result.add_failed_backup(task.project_id, task.volume_id, reason)
 
         except OpenstackSDKException as e:
             reason = _("Backup %s deletion failed." "%s" % (task.backup_id, str(e)))
             LOG.info(reason)
-            task.reason = reason
-            task.backup_status = constants.BACKUP_FAILED
-            task.save()
+            # remove from the queue table
+            task.delete_queue()
+            self.result.add_failed_backup(task.project_id, task.volume_id, reason)
 
     #  delete only available backups: reserved
     def soft_remove_backup_task(self, backup_object):
@@ -278,33 +261,23 @@
                     empty_project = False
                     self.result.add_project(project.id, project.name)
                 for volume in server.attached_volumes:
-                    filter_result = self.filter_by_volume_status(
-                        volume["id"], project.id)
-
-                    if not filter_result:
+                    if not self.filter_by_volume_status(volume["id"], project.id):
                         continue
                     if "name" not in volume:
                         volume_name = volume["id"]
                     else:
                         volume_name = volume["name"][:100]
-                    if filter_result is True:
-                        backup_status = constants.BACKUP_PLANNED
-                        reason = None
-                    else:
-                        backup_status = constants.BACKUP_FAILED
-                        reason = filter_result
                     queues_map.append(
                         QueueMapping(
                             project_id=project.id,
                             volume_id=volume["id"],
                             backup_id="NULL",
                             instance_id=server.id,
-                            backup_status=backup_status,
+                            backup_status=constants.BACKUP_PLANNED,
                             # Only keep the last 100 chars of instance_name and
                             # volume_name for forming backup_name
                             instance_name=server.name[:100],
                             volume_name=volume_name,
-                            reason=reason,
                         )
                     )
         return queues_map
@@ -370,8 +343,11 @@
                     % (backup_name, queue.volume_id, str(error))
                 )
                 LOG.info(reason)
-                queue.reason = reason
-                queue.backup_status = constants.BACKUP_FAILED
+                self.result.add_failed_backup(project_id, queue.volume_id, reason)
+                parsed = parse.parse("Error in creating volume backup {id}", str(error))
+                if parsed is not None:
+                    queue.backup_id = parsed["id"]
+                queue.backup_status = constants.BACKUP_WIP
                 queue.save()
             # Added extra exception as OpenstackSDKException does not handle the keystone unauthourized issue.
             except Exception as error:
@@ -380,8 +356,11 @@
                     % (backup_name, queue.volume_id, str(error))
                 )
                 LOG.error(reason)
-                queue.reason = reason
-                queue.backup_status = constants.BACKUP_FAILED
+                self.result.add_failed_backup(project_id, queue.volume_id, reason)
+                parsed = parse.parse("Error in creating volume backup {id}", str(error))
+                if parsed is not None:
+                    queue.backup_id = parsed["id"]
+                queue.backup_status = constants.BACKUP_WIP
                 queue.save()
         else:
             # Backup planned task cannot have backup_id in the same cycle.
@@ -394,14 +373,15 @@
         reason = _(
             "The backup creation for the volume %s was prefailed." % task.volume_id
         )
+        self.result.add_failed_backup(task.project_id, task.volume_id, reason)
         LOG.warn(reason)
-        task.reason = reason
-        task.backup_status = constants.BACKUP_FAILED
-        task.save()
+        # 2. remove failed task from the task queue
+        task.delete_queue()
 
     def process_failed_backup(self, task):
         # 1. notify via email
         reason = _("The status of backup for the volume %s is error." % task.volume_id)
+        self.result.add_failed_backup(task.project_id, task.volume_id, reason)
         LOG.warn(reason)
         # 2. delete backup generator
         try:
@@ -413,9 +393,8 @@
                     % (task.backup_id, str(ex))
                 )
             )
-        task.reason = reason
-        task.backup_status = constants.BACKUP_FAILED
-        task.save()
+        # 3. remove failed task from the task queue
+        task.delete_queue()
 
     def process_non_existing_backup(self, task):
         task.delete_queue()
@@ -432,8 +411,10 @@
                 backup_completed=1,
             )
         )
-        task.backup_status = constants.BACKUP_COMPLETED
-        task.save()
+        self.result.add_success_backup(task.project_id, task.volume_id, task.backup_id)
+        # 2. remove from the task list
+        task.delete_queue()
+        # 3. TODO(Alex): notify via email
 
     def process_using_backup(self, task):
         # treat same as the available backup for now
diff --git a/staffeln/conductor/manager.py b/staffeln/conductor/manager.py
index 164a38c..a6e93a9 100755
--- a/staffeln/conductor/manager.py
+++ b/staffeln/conductor/manager.py
@@ -5,11 +5,7 @@
 import staffeln.conf
 from futurist import periodics
 from oslo_log import log
-from tooz import coordination
-
 from staffeln.common import constants, context
-from staffeln.common import lock
-from staffeln.common import node_manage
 from staffeln.common import time as xtime
 from staffeln.conductor import backup
 from staffeln.i18n import _
@@ -26,10 +22,8 @@
         self._shutdown = threading.Event()
         self.conf = conf
         self.ctx = context.make_context()
-        self.lock_mgt = lock.LockManager()
         self.controller = backup.Backup()
-        self.puller = node_manage.Puller(self.ctx)
-        LOG.info("%s init (node_id: %s)" % (self.name, self.puller.node_id))
+        LOG.info("%s init" % self.name)
 
     def run(self):
         LOG.info("%s run" % self.name)
@@ -59,12 +53,7 @@
             if not self._backup_cycle_timeout():  # time in
                 LOG.info(_("cycle timein"))
                 for queue in queues_started:
-                    try:
-                        with self.lock_mgt.coordinator.get_lock(queue.volume_id):
-                            self.controller.check_volume_backup_status(queue)
-                    except coordination.LockAcquireFailed:
-                        LOG.debug("Failed to lock task for volume: "
-                                  "%s." % queue.volume_id)
+                    self.controller.check_volume_backup_status(queue)
             else:  # time out
                 LOG.info(_("cycle timeout"))
                 for queue in queues_started:
@@ -112,12 +101,7 @@
         )
         if len(queues_to_start) != 0:
             for queue in queues_to_start:
-                try:
-                    with self.lock_mgt.coordinator.get_lock(queue.volume_id):
-                        self.controller.create_volume_backup(queue)
-                except coordination.LockAcquireFailed:
-                    LOG.debug("Failed to lock task for volume: "
-                              "%s." % queue.volume_id)
+                self.controller.create_volume_backup(queue)
 
     # Refresh the task queue
     def _update_task_queue(self):
@@ -129,7 +113,6 @@
 
     def _report_backup_result(self):
         self.controller.publish_backup_result()
-        self.controller.purge_backups()
 
     def backup_engine(self, backup_service_period):
         LOG.info("backing... %s" % str(time.time()))
@@ -137,15 +120,10 @@
 
         @periodics.periodic(spacing=backup_service_period, run_immediately=True)
         def backup_tasks():
-            with self.lock_mgt:
-                is_puller = self.puller.fetch_puller_role()
-                if is_puller:
-                    self._update_task_queue()
-                    self.puller.renew_update_time()
-                self._process_todo_tasks()
-                self._process_wip_tasks()
-                if is_puller:
-                    self._report_backup_result()
+            self._update_task_queue()
+            self._process_todo_tasks()
+            self._process_wip_tasks()
+            self._report_backup_result()
 
         periodic_callables = [
             (backup_tasks, (), {}),
diff --git a/staffeln/conductor/result.py b/staffeln/conductor/result.py
index e24fed7..1414347 100644
--- a/staffeln/conductor/result.py
+++ b/staffeln/conductor/result.py
@@ -1,9 +1,7 @@
 # Email notification package
 # This should be upgraded by integrating with mail server to send batch
-from oslo_log import log
-
 import staffeln.conf
-from staffeln.common import constants
+from oslo_log import log
 from staffeln.common import email
 from staffeln.common import time as xtime
 from staffeln.conductor import backup
@@ -19,10 +17,38 @@
 
     def initialize(self):
         self.content = ""
-        self.project_list = set()
+        self.project_list = []
+        self.success_backup_list = {}
+        self.failed_backup_list = {}
 
-    def add_project(self, project_id, project_name):
-        self.project_list.add((project_id, project_name))
+    def add_project(self, id, name):
+        if id in self.success_backup_list:
+            return
+        self.project_list.append({"name": name, "id": id})
+        self.success_backup_list[id] = []
+        self.failed_backup_list[id] = []
+
+    def add_success_backup(self, project_id, volume_id, backup_id):
+        if project_id not in self.success_backup_list:
+            LOG.error(_("Not registered project is reported for backup result."))
+            return
+        self.success_backup_list[project_id].append(
+            {
+                "volume_id": volume_id,
+                "backup_id": backup_id,
+            }
+        )
+
+    def add_failed_backup(self, project_id, volume_id, reason):
+        if project_id not in self.failed_backup_list:
+            LOG.error(_("Not registered project is reported for backup result."))
+            return
+        self.failed_backup_list[project_id].append(
+            {
+                "volume_id": volume_id,
+                "reason": reason,
+            }
+        )
 
     def send_result_email(self):
         subject = "Backup result"
@@ -51,29 +77,9 @@
         # 1. get quota
         self.content = "<h3>${TIME}</h3><br>"
         self.content = self.content.replace("${TIME}", xtime.get_current_strtime())
-        backup_mgt = backup.Backup()
-        project_success = {}
-        project_failed = {}
-        success_queues = backup_mgt.get_queues(
-            filters={"backup_status": constants.BACKUP_COMPLETED}
-        )
-        for queue in success_queues:
-            if queue.project_id in project_success:
-                project_success[queue.project_id].append(queue)
-            else:
-                project_success[queue.project_id] = [queue]
-        failed_queues = backup_mgt.get_queues(
-            filters={"backup_status": constants.BACKUP_FAILED}
-        )
-        for queue in failed_queues:
-            if queue.project_id in project_failed:
-                project_failed[queue.project_id].append(queue)
-            else:
-                project_failed[queue.project_id] = [queue]
-
         html = ""
-        for project_id, project_name in self.project_list:
-            quota = backup_mgt.get_backup_quota(project_id)
+        for project in self.project_list:
+            quota = backup.Backup().get_backup_quota(project["id"])
 
             html += (
                 "<h3>Project: ${PROJECT}</h3><br>"
@@ -85,33 +91,27 @@
                 "<h4>${FAILED_VOLUME_LIST}</h4><br>"
             )
 
-            for project_id in project_success:
-                success_volumes = "<br>".join(
-                    [
-                        "Volume ID: %s, Backup ID: %s"
-                        % (str(e.volume_id), str(e.backup_id))
-                        for e in project_success[project_id]
-                    ]
-                )
-            else:
-                success_volumes = "<br>"
-            for project_id in project_failed:
-                failed_volumes = "<br>".join(
-                    [
-                        "Volume ID: %s, Reason: %s"
-                        % (str(e.volume_id), str(e.reason))
-                        for e in project_failed[project_id]
-                    ]
-                )
-            else:
-                failed_volumes = "<br>"
+            success_volumes = "<br>".join(
+                [
+                    "Volume ID: %s, Backup ID: %s"
+                    % (str(e["volume_id"]), str(e["backup_id"]))
+                    for e in self.success_backup_list[project["id"]]
+                ]
+            )
+            failed_volumes = "<br>".join(
+                [
+                    "Volume ID: %s, Reason: %s"
+                    % (str(e["volume_id"]), str(e["reason"]))
+                    for e in self.failed_backup_list[project["id"]]
+                ]
+            )
 
             html = html.replace("${QUOTA_LIMIT}", str(quota["limit"]))
             html = html.replace("${QUOTA_IN_USE}", str(quota["in_use"]))
             html = html.replace("${QUOTA_RESERVED}", str(quota["reserved"]))
             html = html.replace("${SUCCESS_VOLUME_LIST}", success_volumes)
             html = html.replace("${FAILED_VOLUME_LIST}", failed_volumes)
-            html = html.replace("${PROJECT}", project_name)
+            html = html.replace("${PROJECT}", project["name"])
         if html == "":
             return
         self.content += html
diff --git a/staffeln/db/sqlalchemy/alembic/README b/staffeln/db/sqlalchemy/alembic/README
index d6405b1..42fcedd 100644
--- a/staffeln/db/sqlalchemy/alembic/README
+++ b/staffeln/db/sqlalchemy/alembic/README
@@ -1,5 +1,5 @@
 Please see https://alembic.readthedocs.org/en/latest/index.html for general documentation
 
-Upgrade can be performed by:
+Upgrade can be performed by: 
 $ staffeln-dbmanage upgrade
 $ staffeln-dbmanage upgrade head
diff --git a/staffeln/db/sqlalchemy/alembic/script.py.mako b/staffeln/db/sqlalchemy/alembic/scriptpy.mako
similarity index 100%
rename from staffeln/db/sqlalchemy/alembic/script.py.mako
rename to staffeln/db/sqlalchemy/alembic/scriptpy.mako
diff --git a/staffeln/db/sqlalchemy/alembic/versions/003102f08f66_add_puller.py b/staffeln/db/sqlalchemy/alembic/versions/003102f08f66_add_puller.py
deleted file mode 100644
index 50463e0..0000000
--- a/staffeln/db/sqlalchemy/alembic/versions/003102f08f66_add_puller.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""Add puller
-
-Revision ID: 003102f08f66
-Revises: 041d9a0f1159
-Create Date: 2022-11-02 06:02:21.404596
-
-"""
-
-# revision identifiers, used by Alembic.
-revision = '003102f08f66'
-down_revision = '041d9a0f1159'
-
-from alembic import op
-import sqlalchemy as sa
-
-
-def upgrade():
-    op.create_table(
-        'puller',
-        sa.Column('id', sa.Integer(), nullable=False),
-        sa.Column('node_id', sa.String(length=100), nullable=True),
-        sa.Column('created_at', sa.DateTime(), nullable=True),
-        sa.Column('updated_at', sa.DateTime(), nullable=True)
-    )
diff --git a/staffeln/db/sqlalchemy/alembic/versions/041d9a0f1159_backup_add_names.py b/staffeln/db/sqlalchemy/alembic/versions/041d9a0f1159_backup_add_names.py
index a16f27c..c6869b2 100644
--- a/staffeln/db/sqlalchemy/alembic/versions/041d9a0f1159_backup_add_names.py
+++ b/staffeln/db/sqlalchemy/alembic/versions/041d9a0f1159_backup_add_names.py
@@ -1,3 +1,14 @@
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
 """Add volume_name and instance_name to queue_data
 
 Revision ID: 041d9a0f1159
diff --git a/staffeln/db/sqlalchemy/alembic/versions/2b2b9df199bd_add_reason_column_to_queue_data_table.py b/staffeln/db/sqlalchemy/alembic/versions/2b2b9df199bd_add_reason_column_to_queue_data_table.py
deleted file mode 100644
index 4dc6b03..0000000
--- a/staffeln/db/sqlalchemy/alembic/versions/2b2b9df199bd_add_reason_column_to_queue_data_table.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""Add reason column to queue_data table
-
-Revision ID: 2b2b9df199bd
-Revises: 003102f08f66
-Create Date: 2022-11-02 06:14:09.348932
-
-"""
-
-# revision identifiers, used by Alembic.
-revision = '2b2b9df199bd'
-down_revision = '003102f08f66'
-
-from alembic import op
-import sqlalchemy as sa
-
-
-def upgrade():
-    op.add_column(
-        "queue_data",
-        sa.Column("reason", sa.String(length=255), nullable=True)
-    )
diff --git a/staffeln/db/sqlalchemy/api.py b/staffeln/db/sqlalchemy/api.py
index a1395ea..adfa7a7 100644
--- a/staffeln/db/sqlalchemy/api.py
+++ b/staffeln/db/sqlalchemy/api.py
@@ -335,26 +335,3 @@
             return self._soft_delete(models.Backup_data, id)
         except:  # noqa: E722
             LOG.error("Backup Not found.")
-
-    def get_puller(self):
-        """Get puller"""
-        try:
-            return self._get(
-                context, model=models.Puller, fieldname="id", value=1
-            )
-        except:  # noqa: E722
-            LOG.debug("Puller not found.")
-            return None
-
-    def create_puller(self, values):
-        try:
-            puller = self._create(models.Puller, values)
-        except db_exc.DBDuplicateEntry:
-            LOG.error("Puller already exists.")
-        return puller
-
-    def update_puller(self, id, values):
-        try:
-            return self._update(models.Puller, id, values)
-        except:  # noqa: E722
-            LOG.error("Puller resource not found.")
diff --git a/staffeln/db/sqlalchemy/models.py b/staffeln/db/sqlalchemy/models.py
index 6ef7211..6c3deb7 100644
--- a/staffeln/db/sqlalchemy/models.py
+++ b/staffeln/db/sqlalchemy/models.py
@@ -68,13 +68,3 @@
     instance_id = Column(String(100))
     volume_name = Column(String(100))
     instance_name = Column(String(100))
-    reason = Column(String(255), nullable=True)
-
-
-class Puller(Base):
-    """Represent OpenStack information Puller"""
-
-    __tablename__ = "puller"
-    __table_args__ = table_args()
-    id = Column(Integer, primary_key=True)
-    node_id = Column(String(100), nullable=True)
diff --git a/staffeln/objects/puller.py b/staffeln/objects/puller.py
deleted file mode 100644
index c03d70c..0000000
--- a/staffeln/objects/puller.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from oslo_versionedobjects import fields as ovoo_fields
-
-from staffeln.db import api as db_api
-from staffeln.objects import base
-from staffeln.objects import fields as sfeild
-
-
-@base.StaffelnObjectRegistry.register
-class Puller(
-    base.StaffelnPersistentObject, base.StaffelnObject, base.StaffelnObjectDictCompat
-):
-    VERSION = "1.0"
-
-    dbapi = db_api.get_instance()
-
-    fields = {
-        "id": sfeild.IntegerField(),
-        "node_id": sfeild.UUIDField(),
-        "updated_at": ovoo_fields.DateTimeField(),
-    }
-
-    @base.remotable_classmethod
-    def get(cls, context):  # pylint: disable=E0213
-        """Get puller
-        :param context: Security context. NOTE: This should only
-                        be used internally by the indirection_api.
-                        Unfortunately, RPC requires context as the first
-                        argument, even though we don't use it.
-                        A context should be set when instantiating the
-                        object, e.g.: Queue(context)
-        :returns: a :class:`Puller` object.
-        """
-        db_puller = cls.dbapi.get_puller()
-        if not db_puller:
-            return None
-        puller = cls._from_db_object(cls(context), db_puller)
-        return puller
-
-    @base.remotable
-    def create(self):
-        """Create a :class:`Puller` record in the DB"""
-        values = self.obj_get_changes()
-        db_puller = self.dbapi.create_puller(values)
-        self._from_db_object(self, db_puller)
-
-    @base.remotable
-    def save(self):
-        updates = self.obj_get_changes()
-        db_obj = self.dbapi.update_puller(id=1, values=updates)
-        obj = self._from_db_object(self, db_obj, eager=False)
-        self.obj_refresh(obj)
-        self.obj_reset_changes()
-
-    def refresh(self):
-        obj = self.get()
-        self.obj_refresh(obj)
diff --git a/staffeln/objects/queue.py b/staffeln/objects/queue.py
index 2da75bf..561637c 100644
--- a/staffeln/objects/queue.py
+++ b/staffeln/objects/queue.py
@@ -20,7 +20,6 @@
         "backup_status": sfeild.IntegerField(),
         "volume_name": sfeild.StringField(),
         "instance_name": sfeild.StringField(),
-        "reason": sfeild.StringField(),
     }
 
     @base.remotable_classmethod
