diff --git a/Android.mk b/Android.mk
index 96d7a46..e92f634 100644
--- a/Android.mk
+++ b/Android.mk
@@ -36,7 +36,7 @@
 include $(SAM_ROOT)/macloader/Android.mk
 endif
 
-# RIL
 ifeq ($(BOARD_VENDOR),samsung)
 include $(SAM_ROOT)/ril/Android.mk
+BOARD_HARDWARE_CLASS := $(SAM_ROOT)/cmhw
 endif
diff --git a/cmhw/org/cyanogenmod/hardware/VibratorHW.java b/cmhw/org/cyanogenmod/hardware/VibratorHW.java
new file mode 100755
index 0000000..970d74e
--- /dev/null
+++ b/cmhw/org/cyanogenmod/hardware/VibratorHW.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod 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.
+ */
+
+package org.cyanogenmod.hardware;
+
+import org.cyanogenmod.hardware.util.FileUtils;
+
+import java.io.File;
+
+public class VibratorHW {
+
+    private static String LEVEL_PATH = "/sys/class/timed_output/vibrator/pwm_value";
+    private static String LEVEL_MAX_PATH = "/sys/class/timed_output/vibrator/pwm_max";
+    private static String LEVEL_MIN_PATH = "/sys/class/timed_output/vibrator/pwm_min";
+    private static String LEVEL_DEFAULT_PATH = "/sys/class/timed_output/vibrator/pwm_default";
+    private static String LEVEL_THRESHOLD_PATH = "/sys/class/timed_output/vibrator/pwm_threshold";
+
+    public static boolean isSupported() {
+        return true;
+    }
+
+    public static int getMaxIntensity()  {
+        File f = new File(LEVEL_MAX_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_MAX_PATH));
+        } else {
+            return 100;
+        }
+    }
+
+    public static int getMinIntensity()  {
+        File f = new File(LEVEL_MIN_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_MIN_PATH));
+        } else {
+            return 0;
+        }
+    }
+
+    public static int getWarningThreshold()  {
+        File f = new File(LEVEL_THRESHOLD_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_THRESHOLD_PATH));
+        } else {
+            return 75;
+        }
+    }
+
+    public static int getCurIntensity()  {
+        File f = new File(LEVEL_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_PATH));
+        } else {
+            return 0;
+        }
+    }
+
+    public static int getDefaultIntensity()  {
+        File f = new File(LEVEL_DEFAULT_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_DEFAULT_PATH));
+        } else {
+            return 50;
+        }
+    }
+
+    public static boolean setIntensity(int intensity)  {
+        File f = new File(LEVEL_PATH);
+
+        if(f.exists()) {
+            return FileUtils.writeLine(LEVEL_PATH, String.valueOf(intensity));
+        } else {
+            return false;
+        }
+    }
+}
