diff --git a/utils/autolock.h b/utils/autolock.h
new file mode 100644
index 0000000..006406a
--- /dev/null
+++ b/utils/autolock.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <pthread.h>
+
+namespace android {
+
+class AutoLock {
+ public:
+  AutoLock(pthread_mutex_t *mutex, const char *const name)
+      : mutex_(mutex), name_(name) {
+  }
+  ~AutoLock() {
+    if (locked_)
+      Unlock();
+  }
+
+  AutoLock(const AutoLock &rhs) = delete;
+  AutoLock &operator=(const AutoLock &rhs) = delete;
+
+  int Lock();
+  int Unlock();
+
+ private:
+  pthread_mutex_t *const mutex_;
+  bool locked_ = false;
+  const char *const name_;
+};
+}  // namespace android
diff --git a/utils/hwcutils.cpp b/utils/hwcutils.cpp
index 324d855..2dc7e7b 100644
--- a/utils/hwcutils.cpp
+++ b/utils/hwcutils.cpp
@@ -17,12 +17,12 @@
 #define ATRACE_TAG ATRACE_TAG_GRAPHICS
 #define LOG_TAG "hwc-drm-utils"
 
-#include "drmhwcomposer.h"
-#include "platform.h"
-
 #include <log/log.h>
 #include <ui/GraphicBufferMapper.h>
 
+#include "drmhwcomposer.h"
+#include "platform/platform.h"
+
 #define UNUSED(x) (void)(x)
 
 namespace android {
diff --git a/utils/worker.h b/utils/worker.h
new file mode 100644
index 0000000..73a80da
--- /dev/null
+++ b/utils/worker.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2015-2016 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#ifndef ANDROID_WORKER_H_
+#define ANDROID_WORKER_H_
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#include <condition_variable>
+#include <mutex>
+#include <string>
+#include <thread>
+
+namespace android {
+
+class Worker {
+ public:
+  void Lock() {
+    mutex_.lock();
+  }
+  void Unlock() {
+    mutex_.unlock();
+  }
+
+  void Signal() {
+    cond_.notify_all();
+  }
+  void Exit();
+
+  bool initialized() const {
+    return initialized_;
+  }
+
+ protected:
+  Worker(const char *name, int priority);
+  virtual ~Worker();
+
+  int InitWorker();
+  virtual void Routine() = 0;
+
+  /*
+   * Must be called with the lock acquired. max_nanoseconds may be negative to
+   * indicate infinite timeout, otherwise it indicates the maximum time span to
+   * wait for a signal before returning.
+   * Returns -EINTR if interrupted by exit request, or -ETIMEDOUT if timed out
+   */
+  int WaitForSignalOrExitLocked(int64_t max_nanoseconds = -1);
+
+  bool should_exit() const {
+    return exit_;
+  }
+
+  std::mutex mutex_;
+  std::condition_variable cond_;
+
+ private:
+  void InternalRoutine();
+
+  std::string name_;
+  int priority_;
+
+  std::unique_ptr<std::thread> thread_;
+  bool exit_;
+  bool initialized_;
+};
+}  // namespace android
+#endif
