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/datatop/src/datatop.c b/datatop/src/datatop.c
index fba26e1..60253d7 100644
--- a/datatop/src/datatop.c
+++ b/datatop/src/datatop.c
@@ -200,7 +200,7 @@
 	}
 
 	if (usr_cl_opts.iptables_rules_routes == OPT_CHOSE) {
-		if (!usr_cl_opts.out_dir) {
+		if (usr_cl_opts.out_dir[0] == '\0') {
 			printf("Please provide an out directory.\n");
 			exit(EXIT_FAILURE);
 		}
diff --git a/datatop/src/datatop_dev_poll.c b/datatop/src/datatop_dev_poll.c
index 0dcab1e..2a47567 100644
--- a/datatop/src/datatop_dev_poll.c
+++ b/datatop/src/datatop_dev_poll.c
@@ -89,7 +89,7 @@
 		if (line1[j] != '	' && line1[j] != ' ') {
 			dict->val[k] = &line1[j];
 			n = j;
-			while (line1[n] != '	' && line1[n] != ' ')
+			while (line1[n] != 0 && line1[n] != '	' && line1[n] != ' ')
 				n++;
 			if (n < len1)
 				line1[n] = 0;
diff --git a/datatop/src/datatop_ip_table_poll.c b/datatop/src/datatop_ip_table_poll.c
index 980eb4c..09e504d 100644
--- a/datatop/src/datatop_ip_table_poll.c
+++ b/datatop/src/datatop_ip_table_poll.c
@@ -125,7 +125,6 @@
 static void dtop_ip_table_dpg_deconstructor
 			(struct dtop_data_point_gatherer *dpset)
 {
-	int i;
 	free(dpset->prefix);
   if(dpset->file)
   {
@@ -179,9 +178,6 @@
  */
 void dtop_ip_table_poll_cleanup()
 {
-  struct dtop_data_point_gatherer *dpset;
-  struct dtop_linked_list *curr_ptr = ip_dpg_list;
-
   pthread_mutex_lock(&dtop_ip_table_lock);
   deconstruct_dpgs(ip_dpg_list);
   dtop_rem_linked_list(ip_dpg_list);
@@ -200,6 +196,8 @@
   double diff_t = 9999999.00; /* some high # > DTOP_IPTRR_POLL_PERIOD */
   int ret = DTOP_POLL_OK;
 
+  (void) arg;
+
   if (pthread_mutex_init(&dtop_ip_table_lock, NULL) != 0)
   {
       printf("\n mutex init failed\n");
diff --git a/rmnetctl/src/librmnetctl.c b/rmnetctl/src/librmnetctl.c
index c9c74a8..731681a 100644
--- a/rmnetctl/src/librmnetctl.c
+++ b/rmnetctl/src/librmnetctl.c
@@ -343,7 +343,7 @@
 		break;
 	}
 	(*hndl)->pid = (uint32_t)pid;
-	netlink_fd = socket(PF_NETLINK, SOCK_RAW, RMNET_NETLINK_PROTO);
+	netlink_fd = socket(PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, RMNET_NETLINK_PROTO);
 	if (netlink_fd < MIN_VALID_SOCKET_FD) {
 		free(*hndl);
 		*error_code = RMNETCTL_INIT_ERR_NETLINK_FD;
@@ -1027,7 +1027,7 @@
 		return RMNETCTL_LIB_ERR;
 	}
 	(*hndl)->pid = KERNEL_PROCESS_ID;
-	netlink_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+	netlink_fd = socket(AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
 	if (netlink_fd < MIN_VALID_SOCKET_FD) {
 		free(*hndl);
 		*error_code = RMNETCTL_INIT_ERR_NETLINK_FD;
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;
-}
-
