diff --git a/BoardConfig.mk b/BoardConfig.mk
index dd47842..8c988a2 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -49,9 +49,6 @@
 BOARD_KERNEL_CMDLINE += snd_pcm.maximum_substreams=8
 BOARD_KERNEL_CMDLINE += intel_soc_pmu.enable_s3=0
 
-# Custom dumpstate library to add board specific stuff to bugreport
-BOARD_HAL_STATIC_LIBRARIES := libdumpstate.fugu
-
 # Binder API version
 TARGET_USES_64_BIT_BINDER := true
 
diff --git a/device.mk b/device.mk
index c1f49e5..4d8dbb3 100644
--- a/device.mk
+++ b/device.mk
@@ -83,6 +83,10 @@
     audio.r_submix.default \
     libaudio-resampler
 
+# Dumpstate HAL
+PRODUCT_PACKAGES += \
+    android.hardware.dumpstate@1.0-service.fugu
+
 USE_CUSTOM_AUDIO_POLICY := 1
 
 # specific management of audio_policy.conf
diff --git a/dumpstate/Android.mk b/dumpstate/Android.mk
index 14228fc..0cfb2d9 100644
--- a/dumpstate/Android.mk
+++ b/dumpstate/Android.mk
@@ -1,4 +1,4 @@
-# Copyright (C) 2014 The Android Open Source Project
+# Copyright (C) 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.
@@ -12,15 +12,28 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-LOCAL_PATH:= $(call my-dir)
+LOCAL_PATH := $(call my-dir)
+
 include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.dumpstate@1.0-service.fugu
+LOCAL_INIT_RC := android.hardware.dumpstate@1.0-service.fugu.rc
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_SRC_FILES := \
+    DumpstateDevice.cpp \
+    service.cpp
 
-LOCAL_STATIC_LIBRARIES := libdumpstateheaders
-
-LOCAL_SRC_FILES := dumpstate.cpp
-
-LOCAL_MODULE := libdumpstate.fugu
+LOCAL_SHARED_LIBRARIES := \
+    android.hardware.dumpstate@1.0 \
+    libbase \
+    libcutils \
+    libdumpstateutil \
+    libhidlbase \
+    libhidltransport \
+    libhwbinder \
+    liblog \
+    libutils
 
 LOCAL_MODULE_TAGS := optional
+LOCAL_PROPRIETARY_MODULE := true
 
-include $(BUILD_STATIC_LIBRARY)
+include $(BUILD_EXECUTABLE)
diff --git a/dumpstate/DumpstateDevice.cpp b/dumpstate/DumpstateDevice.cpp
new file mode 100644
index 0000000..571d368
--- /dev/null
+++ b/dumpstate/DumpstateDevice.cpp
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 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.
+ */
+
+#define LOG_TAG "dumpstate"
+
+#include "DumpstateDevice.h"
+
+#include "DumpstateUtil.h"
+
+#include <errno.h>
+#include <log/log.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+static const char base64[] =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char pad64 = '=';
+
+using android::os::dumpstate::CommandOptions;
+using android::os::dumpstate::DumpFileToFd;
+using android::os::dumpstate::RunCommandToFd;
+
+namespace android {
+namespace hardware {
+namespace dumpstate {
+namespace V1_0 {
+namespace implementation {
+
+static void base64_output3(int out_fd, const unsigned char *src, int len)
+{
+    dprintf(out_fd, "%c", base64[src[0] >> 2]);
+    dprintf(out_fd, "%c", base64[((src[0] & 0x03) << 4) | (src[1] >> 4)]);
+    if (len == 1) {
+        dprintf(out_fd, "==");
+        return;
+    }
+    dprintf(out_fd, "%c", base64[((src[1] & 0x0F) << 2) | (src[2] >> 6)]);
+    if (len == 2) {
+        dprintf(out_fd, "=");
+        return;
+    }
+    dprintf(out_fd, "%c", base64[src[2] & 0x3F]);
+}
+
+static void fugu_dump_base64(int out_fd, const char *path)
+{
+
+    dprintf(out_fd, "------ (%s) ------\n", path);
+    int fd = open(path, O_RDONLY | O_CLOEXEC | O_NOFOLLOW);
+    if (fd < 0) {
+        dprintf(out_fd, "*** %s: %s\n\n", path, strerror(errno));
+        return;
+    }
+
+    /* buffer size multiple of 3 for ease of use */
+    unsigned char buffer[1200];
+    int left = 0;
+    int count = 0;
+    for (;;) {
+        int ret = read(fd, &buffer[left], sizeof(buffer) - left);
+        if (ret <= 0) {
+            break;
+        }
+        left += ret;
+        int ofs = 0;
+        while (left > 2) {
+            base64_output3(out_fd, &buffer[ofs], 3);
+            left -= 3;
+            ofs += 3;
+            count += 4;
+            if (count > 72) {
+                dprintf(out_fd, "\n");
+                count = 0;
+            }
+        }
+        if (left) {
+            memmove(buffer, &buffer[ofs], left);
+        }
+    }
+    close(fd);
+
+    if (!left) {
+        dprintf(out_fd, "\n------ end ------\n");
+        return;
+    }
+
+    /* finish padding */
+    count = left;
+    while (count < 3) {
+        buffer[count++] = 0;
+    }
+    base64_output3(out_fd, buffer, left);
+
+    dprintf(out_fd, "\n------ end ------\n");
+}
+
+// Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow.
+Return<void> DumpstateDevice::dumpstateBoard(const hidl_handle& handle) {
+    if (handle->numFds < 1) {
+        ALOGE("no FDs\n");
+        return Void();
+    }
+
+    int fd = handle->data[0];
+    if (fd < 0) {
+        ALOGE("invalid FD: %d\n", handle->data[0]);
+        return Void();
+    }
+
+    DumpFileToFd(fd, "INTERRUPTS", "/proc/interrupts");
+    DumpFileToFd(fd, "last ipanic_console", "/data/dontpanic/ipanic_console");
+    DumpFileToFd(fd, "last ipanic_threads", "/data/dontpanic/ipanic_threads");
+
+    fugu_dump_base64(fd, "/dev/snd_atvr_mSBC");
+    fugu_dump_base64(fd, "/dev/snd_atvr_pcm");
+
+    return Void();
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace dumpstate
+}  // namespace hardware
+}  // namespace android
diff --git a/dumpstate/DumpstateDevice.h b/dumpstate/DumpstateDevice.h
new file mode 100644
index 0000000..f8585f5
--- /dev/null
+++ b/dumpstate/DumpstateDevice.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 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_HARDWARE_DUMPSTATE_V1_0_DUMPSTATEDEVICE_H
+#define ANDROID_HARDWARE_DUMPSTATE_V1_0_DUMPSTATEDEVICE_H
+
+#include <android/hardware/dumpstate/1.0/IDumpstateDevice.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace dumpstate {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::dumpstate::V1_0::IDumpstateDevice;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_handle;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct DumpstateDevice : public IDumpstateDevice {
+    // Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow.
+    Return<void> dumpstateBoard(const hidl_handle& h) override;
+
+};
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace dumpstate
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_DUMPSTATE_V1_0_DUMPSTATEDEVICE_H
diff --git a/dumpstate/NOTICE b/dumpstate/NOTICE
index e2ca067..e48dd6b 100644
--- a/dumpstate/NOTICE
+++ b/dumpstate/NOTICE
@@ -1,5 +1,5 @@
 
-   Copyright (C) 2014 The Android Open Source Project
+   Copyright (C) 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.
diff --git a/dumpstate/android.hardware.dumpstate@1.0-service.fugu.rc b/dumpstate/android.hardware.dumpstate@1.0-service.fugu.rc
new file mode 100644
index 0000000..49cb711
--- /dev/null
+++ b/dumpstate/android.hardware.dumpstate@1.0-service.fugu.rc
@@ -0,0 +1,4 @@
+service dumpstate-1-0 /vendor/bin/hw/android.hardware.dumpstate@1.0-service.guppy
+    class hal
+    user system
+    group system
diff --git a/dumpstate/dumpstate.cpp b/dumpstate/dumpstate.cpp
deleted file mode 100644
index 112ec0a..0000000
--- a/dumpstate/dumpstate.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2014 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 <dumpstate.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-static const char base64[] =
-    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-static const char pad64 = '=';
-
-static void base64_output3(const unsigned char *src, int len)
-{
-    printf("%c", base64[src[0] >> 2]);
-    printf("%c", base64[((src[0] & 0x03) << 4) | (src[1] >> 4)]);
-    if (len == 1) {
-        printf("==");
-        return;
-    }
-    printf("%c", base64[((src[1] & 0x0F) << 2) | (src[2] >> 6)]);
-    if (len == 2) {
-        printf("=");
-        return;
-    }
-    printf("%c", base64[src[2] & 0x3F]);
-}
-
-static void fugu_dump_base64(const char *path)
-{
-
-    printf("------ (%s) ------\n", path);
-    int fd = open(path, O_RDONLY | O_CLOEXEC | O_NOFOLLOW);
-    if (fd < 0) {
-        printf("*** %s: %s\n\n", path, strerror(errno));
-        return;
-    }
-
-    /* buffer size multiple of 3 for ease of use */
-    unsigned char buffer[1200];
-    int left = 0;
-    int count = 0;
-    for (;;) {
-        int ret = read(fd, &buffer[left], sizeof(buffer) - left);
-        if (ret <= 0) {
-            break;
-        }
-        left += ret;
-        int ofs = 0;
-        while (left > 2) {
-            base64_output3(&buffer[ofs], 3);
-            left -= 3;
-            ofs += 3;
-            count += 4;
-            if (count > 72) {
-                printf("\n");
-                count = 0;
-            }
-        }
-        if (left) {
-            memmove(buffer, &buffer[ofs], left);
-        }
-    }
-    close(fd);
-
-    if (!left) {
-        printf("\n------ end ------\n");
-        return;
-    }
-
-    /* finish padding */
-    count = left;
-    while (count < 3) {
-        buffer[count++] = 0;
-    }
-    base64_output3(buffer, left);
-
-    printf("\n------ end ------\n");
-}
-
-void dumpstate_board()
-{
-    Dumpstate& ds = Dumpstate::GetInstance();
-
-    ds.DumpFile("INTERRUPTS", "/proc/interrupts");
-    ds.DumpFile("last ipanic_console", "/data/dontpanic/ipanic_console");
-    ds.DumpFile("last ipanic_threads", "/data/dontpanic/ipanic_threads");
-    fugu_dump_base64("/dev/snd_atvr_mSBC");
-    fugu_dump_base64("/dev/snd_atvr_pcm");
-};
diff --git a/dumpstate/service.cpp b/dumpstate/service.cpp
new file mode 100644
index 0000000..eaaa5ab
--- /dev/null
+++ b/dumpstate/service.cpp
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 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.
+ */
+#define LOG_TAG "android.hardware.dumpstate@1.0-service.fugu"
+
+#include <hidl/HidlSupport.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include "DumpstateDevice.h"
+
+using ::android::hardware::configureRpcThreadpool;
+using ::android::hardware::dumpstate::V1_0::IDumpstateDevice;
+using ::android::hardware::dumpstate::V1_0::implementation::DumpstateDevice;
+using ::android::hardware::joinRpcThreadpool;
+using ::android::sp;
+
+
+int main(int /* argc */, char* /* argv */ []) {
+  sp<IDumpstateDevice> dumpstate = new DumpstateDevice;
+  configureRpcThreadpool(1, true);
+  dumpstate->registerAsService("dumpstate");
+  joinRpcThreadpool();
+}
diff --git a/sepolicy/dumpstate.te b/sepolicy/dumpstate.te
index a3c754f..36aaa9c 100644
--- a/sepolicy/dumpstate.te
+++ b/sepolicy/dumpstate.te
@@ -1,6 +1,2 @@
-userdebug_or_eng(`
-        allow dumpstate atvr_device:chr_file r_file_perms;
-')
-
 # GPU dynamic fbc feature
 allow dumpstate surfaceflinger:fifo_file rw_file_perms;
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
index 8f9ef45..9cceec5 100644
--- a/sepolicy/file_contexts
+++ b/sepolicy/file_contexts
@@ -9,6 +9,8 @@
 
 /system/bin/BtFwLoader       u:object_r:btfwloader_exec:s0
 
+/vendor/bin/hw/android\.hardware\.dumpstate@1\.0-service.fugu      u:object_r:hal_dumpstate_impl_exec:s0
+
 /sys/devices/pci0000:00/0000:00:01\.3/mmc_host/mmc2/mmc2:0001/mmc2:0001:2/ieee80211/phy[0-9]+/rfkill[0-9]+/type  u:object_r:sysfs_bluetooth:s0
 /sys/devices/pci0000:00/0000:00:01\.3/mmc_host/mmc2/mmc2:0001/mmc2:0001:2/rfkill/rfkill[0-9]+/type  u:object_r:sysfs_bluetooth:s0
 /sys/devices/platform/bcm_bt_lpm.0/rfkill/rfkill[0-9]/state     u:object_r:sysfs_bluetooth_writable:s0
diff --git a/sepolicy/hal_dumpstate_impl.te b/sepolicy/hal_dumpstate_impl.te
new file mode 100644
index 0000000..1e34f09
--- /dev/null
+++ b/sepolicy/hal_dumpstate_impl.te
@@ -0,0 +1,8 @@
+type hal_dumpstate_impl, domain, hal_dumpstate;
+type hal_dumpstate_impl_exec, exec_type, file_type;
+
+init_daemon_domain(hal_dumpstate_impl)
+
+userdebug_or_eng(`
+        allow hal_dumpstate_impl atvr_device:chr_file r_file_perms;
+')
\ No newline at end of file
