diff --git a/src/task.c b/src/task.c
index ceea09126c4461135c53c5a5b70355398bb475e7..d787e92af8cfffbfb397da254ca50515383e0194 100644
--- a/src/task.c
+++ b/src/task.c
@@ -261,6 +261,11 @@ void task_unlock(struct task *t) {
   /* Act based on task type. */
   switch (type) {
 
+    case task_type_drift:
+      cell_unlocktree(ci);
+      cell_gunlocktree(ci);
+      break;
+    
     case task_type_sort:
       cell_unlocktree(ci);
       break;
@@ -328,6 +333,15 @@ int task_lock(struct task *t) {
 #endif
       break;
 
+    case task_type_drift:
+      if (ci->hold || ci->ghold) return 0;
+      if (cell_locktree(ci) != 0) return 0;
+      if (cell_glocktree(ci) != 0) {
+	cell_unlocktree(ci);
+	return 0;
+      }
+      break;
+
     case task_type_sort:
       if (cell_locktree(ci) != 0) return 0;
       break;