diff --git a/Makefile.common b/Makefile.common
index 28c87db..5a43aa5 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -519,6 +519,7 @@
     android/hw-lcd.c \
     android/hw-events.c \
     android/hw-control.c \
+    android/hw-fingerprint.c \
     android/hw-sensors.c \
     android/hw-qemud.c \
     android/looper-qemu.cpp \
diff --git a/android/console.c b/android/console.c
index 90ddbb0..f802064 100644
--- a/android/console.c
+++ b/android/console.c
@@ -51,6 +51,7 @@
 #include <fcntl.h>
 #include "android/hw-events.h"
 #include "android/user-events.h"
+#include "android/hw-fingerprint.h"
 #include "android/hw-sensors.h"
 #include "android/skin/charmap.h"
 #include "android/skin/keycode-buffer.h"
@@ -2597,6 +2598,49 @@
 /********************************************************************************************/
 /********************************************************************************************/
 /*****                                                                                 ******/
+/*****                        F I N G E R P R I N T  C O M M A N D S                   ******/
+/*****                                                                                 ******/
+/********************************************************************************************/
+/********************************************************************************************/
+
+static int
+do_fingerprint_touch(ControlClient client, char* args )
+{
+    if (args) {
+        char *endptr;
+        int fingerid = strtol(args, &endptr, 0);
+        if (endptr != args) {
+            android_hw_fingerprint_touch(fingerid);
+            return 0;
+        }
+        control_write(client, "KO: invalid fingerid\r\n");
+        return -1;
+    }
+    control_write(client, "KO: missing fingerid\r\n");
+    return -1;
+}
+
+static int
+do_fingerprint_remove(ControlClient client, char* args )
+{
+    android_hw_fingerprint_remove();
+    return 0;
+}
+
+static const CommandDefRec fingerprint_commands[] =
+{
+    { "touch", "touch finger print sensor with <fingerid>",
+      "'touch <fingerid>' touch finger print sensor with <fingerid>.\r\n",
+      NULL, do_fingerprint_touch, NULL },
+    { "remove", "remove finger from the fingerprint sensor",
+      "'remove' remove finger from the fingerprint sensor.\r\n",
+      NULL, do_fingerprint_remove, NULL },
+    { NULL, NULL, NULL, NULL, NULL, NULL }
+};
+
+/********************************************************************************************/
+/********************************************************************************************/
+/*****                                                                                 ******/
 /*****                           M A I N   C O M M A N D S                             ******/
 /*****                                                                                 ******/
 /********************************************************************************************/
@@ -2957,6 +3001,10 @@
       "allows you to request the emulator sensors\r\n", NULL,
       NULL, sensor_commands },
 
+    { "finger", "manage emulator finger print",
+      "allows you to touch the emulator finger print sensor\r\n", NULL,
+      NULL, fingerprint_commands},
+
     { NULL, NULL, NULL, NULL, NULL, NULL }
 };
 
diff --git a/android/hw-fingerprint.c b/android/hw-fingerprint.c
new file mode 100644
index 0000000..7456602
--- /dev/null
+++ b/android/hw-fingerprint.c
@@ -0,0 +1,222 @@
+/* Copyright (C) 2015 The Android Open Source Project
+**
+** This software is licensed under the terms of the GNU General Public
+** License version 2, as published by the Free Software Foundation, and
+** may be copied, distributed, and modified under those terms.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+*/
+
+#include "android/hw-fingerprint.h"
+#include "android/utils/debug.h"
+#include "android/utils/misc.h"
+#include "android/utils/system.h"
+#include "android/hw-qemud.h"
+#include "android/globals.h"
+#include "hw/hw.h"
+
+#include <math.h>
+
+#define  E(...)    derror(__VA_ARGS__)
+#define  W(...)    dwarning(__VA_ARGS__)
+#define  D(...)  VERBOSE_PRINT(init,__VA_ARGS__)
+#define  V(...)  VERBOSE_PRINT(init,__VA_ARGS__)
+
+/***********************************************************************************
+
+            All the declarations
+
+***********************************************************************************/
+
+typedef struct HwFingerprintClient   HwFingerprintClient;
+
+typedef struct {
+    QemudService*           qemu_listen_service;
+    HwFingerprintClient*    fp_clients;
+    int32_t     fingerid;
+    int32_t     finger_is_on_sensor;
+} HwFingerprintService;
+
+struct HwFingerprintClient {
+    HwFingerprintClient*    next;
+    HwFingerprintService*          fp;
+    QemudClient*            qemu_client;
+};
+
+static void
+_hwFingerprintClient_recv(void* opaque, uint8_t* msg, int msglen,
+                      QemudClient*  client );
+
+static void
+_hwFingerprintClient_close(void* opaque);
+
+static HwFingerprintClient*
+_hwFingerprintClient_new( HwFingerprintService*  fp);
+
+/* the only static variable */
+static HwFingerprintService _fingerprintState[1];
+
+static void _hwFingerprint_send();
+
+static QemudClient*
+_hwFingerprint_connect(void*  opaque,
+                    QemudService*  service,
+                    int  channel,
+                    const char* client_param);
+static void
+_hwFingerprintClient_removeFromList(HwFingerprintClient** phead,
+        HwFingerprintClient* target);
+
+static void
+_hwFingerprint_save(QEMUFile*  f, QemudService*  sv, void*  opaque);
+
+static int
+_hwFingerprint_load(QEMUFile*  f, QemudService*  sv, void*  opaque);
+/***********************************************************************************
+
+            All the public methods
+
+***********************************************************************************/
+
+void
+android_hw_fingerprint_init( void )
+{
+    HwFingerprintService*  fp = _fingerprintState;
+
+    if (fp->qemu_listen_service == NULL) {
+        fp->qemu_listen_service = qemud_service_register("fingerprintlisten", 0, fp,
+                _hwFingerprint_connect, _hwFingerprint_save, _hwFingerprint_load);
+        D("%s: fingerprint qemud listen service initialized\n", __FUNCTION__);
+    }
+}
+
+void
+android_hw_fingerprint_touch(int fingerid)
+{
+    HwFingerprintService*  fp = _fingerprintState;
+    D("touched fingerprint sensor with finger id %d\n", fingerid);
+    fp->fingerid = fingerid;
+    fp->finger_is_on_sensor = 1;
+    _hwFingerprint_send();
+}
+
+void
+android_hw_fingerprint_remove()
+{
+    HwFingerprintService*  fp = _fingerprintState;
+    D("finger removed from the fingerprint sensor\n");
+    fp->finger_is_on_sensor = 0;
+    _hwFingerprint_send();
+}
+
+/***********************************************************************************
+
+            All the static methods
+
+***********************************************************************************/
+
+static void
+_hwFingerprint_save(QEMUFile*  f, QemudService*  sv, void*  opaque)
+{
+    HwFingerprintService* fp = opaque;
+    qemu_put_be32(f, fp->fingerid);
+    qemu_put_be32(f, fp->finger_is_on_sensor);
+}
+
+static int
+_hwFingerprint_load(QEMUFile*  f, QemudService*  sv, void*  opaque)
+{
+    HwFingerprintService* fp = opaque;
+    fp->fingerid = qemu_get_be32(f);
+    fp->finger_is_on_sensor = qemu_get_be32(f);
+    return 0;
+}
+
+static void
+_hwFingerprint_send()
+{
+    HwFingerprintService*  fp = _fingerprintState;
+    HwFingerprintClient*    fp_client = fp->fp_clients;
+    if (!fp_client)
+        return;
+
+    char buffer[128];
+    if (fp->finger_is_on_sensor) {
+        /* send back the finger id that is on the finger print sensor */
+        snprintf(buffer, sizeof(buffer) - 1, "on:%d", fp_client->fp->fingerid);
+    } else {
+        snprintf(buffer, sizeof(buffer) - 1, "off");
+    }
+    qemud_client_send(fp_client->qemu_client, (const uint8_t*)buffer,
+            strlen(buffer)+1 /*add 1 for '\0'*/);
+}
+
+static QemudClient*
+_hwFingerprint_connect(void*  opaque,
+                    QemudService*  service,
+                    int  channel,
+                    const char* client_param)
+{
+    HwFingerprintService*  fp = opaque;
+    HwFingerprintClient*    fp_client = _hwFingerprintClient_new(fp);
+    QemudClient*    client  = qemud_client_new(service, channel, client_param, fp_client,
+                                                _hwFingerprintClient_recv,
+                                                _hwFingerprintClient_close,
+                                                NULL, /* no save */
+                                                NULL /* no load */ );
+    qemud_client_set_framing(client, 1);
+    fp_client->qemu_client = client;
+
+    D("%s: connect finger print listen is called\n", __FUNCTION__);
+    return client;
+}
+
+static void
+_hwFingerprintClient_recv(void* opaque, uint8_t* msg, int msglen,
+                      QemudClient*  client )
+{
+    /* HwFingerprintClient*       fp_client = opaque; */
+    D("got message from guest system fingerprint HAL\n");
+}
+
+static HwFingerprintClient*
+_hwFingerprintClient_new( HwFingerprintService*  fp)
+{
+    HwFingerprintClient*  fp_client;
+    ANEW0(fp_client);
+    fp_client->fp = fp;
+    fp_client->next = fp->fp_clients;
+    fp->fp_clients = fp_client;
+    return fp_client;
+}
+
+static void
+_hwFingerprintClient_close(void* opaque)
+{
+    HwFingerprintClient*       fp_client = opaque;
+    if (fp_client->fp) {
+        HwFingerprintClient** pnode = &fp_client->fp->fp_clients;
+        _hwFingerprintClient_removeFromList(pnode, fp_client);
+        fp_client->next = NULL;
+        fp_client->fp = NULL;
+    }
+    AFREE(fp_client);
+}
+
+static void
+_hwFingerprintClient_removeFromList(HwFingerprintClient** phead, HwFingerprintClient* target)
+{
+    for (;;) {
+        HwFingerprintClient* node = *phead;
+        if (node == NULL)
+            break;
+        if (node == target) {
+            *phead = target->next;
+            break;
+        }
+        phead = &node->next;
+    }
+}
diff --git a/android/hw-fingerprint.h b/android/hw-fingerprint.h
new file mode 100644
index 0000000..16806e9
--- /dev/null
+++ b/android/hw-fingerprint.h
@@ -0,0 +1,26 @@
+/* Copyright (C) 2015 The Android Open Source Project
+**
+** This software is licensed under the terms of the GNU General Public
+** License version 2, as published by the Free Software Foundation, and
+** may be copied, distributed, and modified under those terms.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+*/
+#ifndef _android_fingerprint_h
+#define _android_fingerprint_h
+
+#include "qemu-common.h"
+
+/* initialize */
+extern void  android_hw_fingerprint_init( void );
+
+/* touch fingerprint sensor with fingerid*/
+void android_hw_fingerprint_touch(int fingerid);
+
+/* take finger off the fingerprint sensor */
+void android_hw_fingerprint_remove();
+
+#endif /* _android_fingerprint_h */
diff --git a/android/qemu-setup.c b/android/qemu-setup.c
index 7985246..36cbca9 100644
--- a/android/qemu-setup.c
+++ b/android/qemu-setup.c
@@ -19,6 +19,7 @@
 #include "android/android.h"
 #include "android/globals.h"
 #include "android/hw-sensors.h"
+#include "android/hw-fingerprint.h"
 #include "android/utils/debug.h"
 #include "android/utils/path.h"
 #include "android/utils/system.h"
@@ -468,6 +469,9 @@
     /* initialize sensors, this must be done here due to timer issues */
     android_hw_sensors_init();
 
+    /* initilize fingperprint here */
+    android_hw_fingerprint_init();
+
    /* cool, now try to run the "ddms ping" command, which will take care of pinging usage
     * if the user agreed for it. the emulator itself never sends anything to any outside
     * machine
