diff --git a/datatop/src/Android.mk b/datatop/src/Android.mk
index f61e654..b1887a7 100644
--- a/datatop/src/Android.mk
+++ b/datatop/src/Android.mk
@@ -30,4 +30,7 @@
 LOCAL_MODULE := datatop
 LOCAL_MODULE_TAGS := optional
 
+LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib
+LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64
+
 include $(BUILD_EXECUTABLE)
diff --git a/sockev/Android.mk b/sockev/Android.mk
deleted file mode 100644
index 8338432..0000000
--- a/sockev/Android.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-include $(call all-subdir-makefiles)
-
diff --git a/sockev/src/Android.mk b/sockev/src/Android.mk
deleted file mode 100644
index d0a29ee..0000000
--- a/sockev/src/Android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := sockev_cli.c
-LOCAL_CFLAGS := -Wall -Werror
-
-LOCAL_C_INCLUDES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
-LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
-
-LOCAL_CLANG := true
-LOCAL_MODULE := sockev
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
diff --git a/sockev/src/sockev_cli.c b/sockev/src/sockev_cli.c
deleted file mode 100644
index 5cecf36..0000000
--- a/sockev/src/sockev_cli.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/******************************************************************************
-			S O C K E V _ C L I . C
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-	* Redistributions of source code must retain the above copyright
-	  notice, this list of conditions and the following disclaimer.
-	* Redistributions in binary form must reproduce the above
-	  copyright notice, this list of conditions and the following
-	  disclaimer in the documentation and/or other materials provided
-	  with the distribution.
-	* Neither the name of The Linux Foundation nor the names of its
-	  contributors may be used to endorse or promote products derived
-	  from this software without specific prior written permission.
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-******************************************************************************/
-
-/******************************************************************************
-  @file    sockev_cli.c
-  @brief   command line test utility to receive sockev netlink messages.
-******************************************************************************/
-
-#include <sys/socket.h>
-#include <linux/netlink.h>
-#include <linux/sockev.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <string.h>
-
-#define SOCKEVCLI_ERROR -1
-
-int main(void)
-{
-	int skfd, rc;
-	socklen_t addrlen;
-	struct sockaddr_nl my_addr, src_addr;
-	struct nlmsghdr *nlh = NULL;
-	struct sknlsockevmsg *msg;
-
-	nlh = (struct nlmsghdr *)
-		malloc(NLMSG_SPACE(sizeof(struct sknlsockevmsg) + 16));
-	if (!nlh) {
-		fprintf(stderr, "malloc() failed\n");
-		return SOCKEVCLI_ERROR;
-	}
-
-	skfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCKEV);
-	if (skfd < 0) {
-		fprintf(stderr, "nl_open_sock: socket failed\n");
-		return SOCKEVCLI_ERROR;
-	}
-
-	memset(&my_addr, 0, sizeof(struct sockaddr_nl));
-
-	my_addr.nl_family = AF_NETLINK;
-	my_addr.nl_pid = getpid();
-	my_addr.nl_groups = SKNLGRP_SOCKEV;
-
-	rc = bind(skfd, (struct sockaddr *)&my_addr,
-		  sizeof(struct sockaddr_nl));
-	if (rc < 0) {
-		fprintf(stderr, "nl_open_sock: bind failed\n");
-		close(skfd);
-		return SOCKEVCLI_ERROR;
-	}
-
-	while (1) {
-		recvfrom(skfd, nlh, sizeof(struct sknlsockevmsg) + 16, 0,
-			 (const struct sockaddr *)&src_addr, &addrlen);
-		msg = NLMSG_DATA(nlh);
-		printf("----------------------------\n");
-		printf("pid:\t%d\n", msg->pid);
-		printf("event:\t%s\n", msg->event);
-		printf("skfamily:\t0x%04X\n", msg->skfamily);
-		printf("skstate:\t%03d\n", msg->skstate);
-		printf("skprotocol:\t%03d\n", msg->skprotocol);
-		printf("sktype:\t0x%04X\n", msg->sktype);
-		printf("skflags:\t0x%016llX\n", msg->skflags);
-	}
-
-	return 0;
-}
-
