diff --git a/dongle.c b/dongle.c
index 3cacbf545a7529c27ba74ec261c24d502c1695b0..870fbb6eac59c4704f6ef79b6f9ebc5b83201dc2 100644
--- a/dongle.c
+++ b/dongle.c
@@ -14,11 +14,43 @@
 
 #include "dongle.h"
 
-struct ubus_context *global_ctx;
-int debug;
+static void uloop_add_get_devices(struct uloop_timeout *t);
+static int get_devices_from_path(char *input_path);
+static int get_devices(void);
+static int poll_devices(struct uloop_timeout *t);
+static int tag_missing_devices(void);
+static int add_device(struct device *new_dev);
+static int delete_all_devices(void);
+static int delete_device_by_name(char *name);
+static int delete_device(struct device *dev);
+static void free_device(struct device *dev);
+static void free_usb(struct USB *usb);
+static struct device *search_list(char *name);
+static char *get_usb_stat(char *path, char *file);
+static char *get_device_name(char *dir_name);
+static char *get_device_ip(char *device_name);
+static int list_to_blob(struct blob_buf *bb);
+static int print_list(struct ubus_context *ctx, struct ubus_object *obj,
+					  struct ubus_request_data *req, const char *method,
+					  struct blob_attr *msg);
+static int clear(struct ubus_context *ctx, struct ubus_object *obj,
+				 struct ubus_request_data *req, const char *method,
+				 struct blob_attr *msg);
+static int test(struct ubus_context *ctx, struct ubus_object *obj,
+				struct ubus_request_data *req, const char *method,
+				struct blob_attr *msg);
+static int remove_device(struct ubus_context *ctx, struct ubus_object *obj,
+						 struct ubus_request_data *req, const char *method,
+						 struct blob_attr *msg);
+static void init_ubus(void);
+static int publish_object(struct ubus_context *ctx);
+
+static struct ubus_context *global_ctx;
 struct device *global_dev;
+int debug;
+
 
-struct uloop_timeout timeout = {
+static struct uloop_timeout timeout = {
 	.cb = poll_devices
 };
 
@@ -27,7 +59,7 @@ static struct option long_options[] = {
 	{0,	0,	0,	0}
 };
 
-const struct blobmsg_policy dev_policy[__DEV_MAX] = {
+static const struct blobmsg_policy dev_policy[__DEV_MAX] = {
 	[DEV] = {.name = "dev", .type = BLOBMSG_TYPE_STRING},
 };
 
@@ -36,7 +68,7 @@ enum {
 	__USB_MAX
 };
 
-const struct blobmsg_policy usb_policy[__USB_MAX] = {
+static const struct blobmsg_policy usb_policy[__USB_MAX] = {
 	[USB_PATH] = {.name = "path", .type = BLOBMSG_TYPE_STRING},
 };
 
@@ -44,7 +76,7 @@ LIST_HEAD(devices);
 LIST_HEAD(stack);
 LIST_HEAD(visited);
 
-int parse_args(int argc, char **argv)
+static int parse_args(int argc, char **argv)
 {
 	char ch;
 
@@ -78,7 +110,7 @@ fail:
 	return -1;
 }
 
-int poll_devices(struct uloop_timeout *t)
+static int poll_devices(struct uloop_timeout *t)
 {
 	get_devices();
 	tag_missing_devices();
@@ -88,7 +120,7 @@ int poll_devices(struct uloop_timeout *t)
 	return 0;
 }
 
-int tag_missing_devices(void)
+static int tag_missing_devices(void)
 {
 	struct device *dev, *tmp;
 
@@ -110,7 +142,7 @@ int tag_missing_devices(void)
 	return 0;
 }
 
-int update_device(struct device *dev)
+static int update_device(struct device *dev)
 {
 	struct device *prev_dev;
 	int rv;
@@ -151,7 +183,7 @@ fail:
 	return -2;
 }
 
-int add_device(struct device *dev)
+static int add_device(struct device *dev)
 {
 	int rv;
 
@@ -181,12 +213,12 @@ int add_device(struct device *dev)
 already_present:
 	return -1;
 fail_publish:
-	dongle_destroy_dynamic_object(dev->ubus_obj);
+	dongle_destroy_dynamic_object(&(dev->ubus_obj));
 fail:
 	return -2;
 }
 
-int delete_all_devices(void)
+static int delete_all_devices(void)
 {
 	struct device *dev, *tmp;
 
@@ -199,7 +231,7 @@ int delete_all_devices(void)
 	return 0;
 }
 
-int delete_device_by_name(char *name)
+static int delete_device_by_name(char *name)
 {
 	struct device *dev, *tmp;
 
@@ -215,7 +247,7 @@ int delete_device_by_name(char *name)
 	return -1;
 }
 
-int delete_device(struct device *dev)
+static int delete_device(struct device *dev)
 {
 	if (dev->ubus_obj) {
 		unpublish_ubus_object(global_ctx, dev->ubus_obj);
@@ -229,7 +261,7 @@ int delete_device(struct device *dev)
 	return 0;
 }
 
-void free_device(struct device *dev)
+static void free_device(struct device *dev)
 {
 	if (!dev)
 		return;
@@ -239,7 +271,7 @@ void free_device(struct device *dev)
 	//free(&(dev->usb));
 }
 
-void free_usb(struct USB *usb)
+static void free_usb(struct USB *usb)
 {
 	if (!usb)
 		return;
@@ -250,7 +282,7 @@ void free_usb(struct USB *usb)
 	free(usb->if_name);
 }
 
-struct device *search_list(char *name)
+static struct device *search_list(char *name)
 {
 	struct device *dev;
 
@@ -331,7 +363,7 @@ fail_fopen:
 	return NULL;
 }
 
-char *get_device_name(char *dir_name)
+static char *get_device_name(char *dir_name)
 {
 	char path[PATH_MAX], *name = NULL;
 	struct directory *dr, *sub_dr;
@@ -415,7 +447,7 @@ fail_dr:
 	return NULL;
 }
 
-int get_devices_from_path(char *input_path)
+static int get_devices_from_path(char *input_path)
 {
 	char *path, *name;
 	struct dirent *de;
@@ -483,7 +515,7 @@ fail_dr:
 	return -1;
 }
 
-int get_devices(void)
+static int get_devices(void)
 {
 	char devices_path[PATH_MAX], mount_path[PATH_MAX];
 	struct dirent *de;
@@ -516,7 +548,7 @@ fail_dr:
 	return -1;
 }
 
-char *get_device_ip(char *device_name)
+static char *get_device_ip(char *device_name)
 {
 	char *iface, *destination, *gateway, *flags, *route, *ipv4_addr = NULL;
 	int host_flag;
@@ -565,7 +597,7 @@ fail_fopen:
 	return ipv4_addr;
 }
 
-int list_to_blob(struct blob_buf *bb)
+static int list_to_blob(struct blob_buf *bb)
 {
 	struct device *net_dev;
 	void *arr, *table;
@@ -618,7 +650,7 @@ fail:
 	return UBUS_STATUS_UNKNOWN_ERROR;
 }
 
-int print_list(struct ubus_context *ctx, struct ubus_object *obj,
+static int print_list(struct ubus_context *ctx, struct ubus_object *obj,
 			   struct ubus_request_data *req, const char *method,
 			   struct blob_attr *msg)
 {
@@ -636,25 +668,25 @@ fail:
 	return rv;
 }
 
-int clear(struct ubus_context *ctx, struct ubus_object *obj,
-		  struct ubus_request_data *req, const char *method,
-		  struct blob_attr *msg)
+static int clear(struct ubus_context *ctx, struct ubus_object *obj,
+				 struct ubus_request_data *req, const char *method,
+				 struct blob_attr *msg)
 {
 	printf("%d\n", delete_all_devices());
 	return 0;
 }
 
-int test(struct ubus_context *ctx, struct ubus_object *obj,
-		 struct ubus_request_data *req, const char *method,
-		 struct blob_attr *msg)
+static int test(struct ubus_context *ctx, struct ubus_object *obj,
+				struct ubus_request_data *req, const char *method,
+				struct blob_attr *msg)
 {
 	printf("%s\n", get_device_ip("usb0"));
 	return 0;
 }
 
-int alert(struct ubus_context *ctx, struct ubus_object *obj,
-		 struct ubus_request_data *req, const char *method,
-		 struct blob_attr *msg)
+static int alert(struct ubus_context *ctx, struct ubus_object *obj,
+				 struct ubus_request_data *req, const char *method,
+				 struct blob_attr *msg)
 {
 	struct blob_attr *tb[__USB_MAX];
 	char *usb_path;
@@ -671,9 +703,9 @@ fail:
 	return UBUS_STATUS_INVALID_ARGUMENT;
 }
 
-int remove_device(struct ubus_context *ctx, struct ubus_object *obj,
-				  struct ubus_request_data *req, const char *method,
-				  struct blob_attr *msg)
+static int remove_device(struct ubus_context *ctx, struct ubus_object *obj,
+						 struct ubus_request_data *req, const char *method,
+						 struct blob_attr *msg)
 {
 	struct blob_attr *tb[__DEV_MAX];
 	char *dev;
@@ -691,7 +723,7 @@ fail:
 	return UBUS_STATUS_INVALID_ARGUMENT;
 }
 
-int update(struct ubus_context *ctx, struct ubus_object *obj,
+static int update(struct ubus_context *ctx, struct ubus_object *obj,
 				  struct ubus_request_data *req, const char *method,
 				  struct blob_attr *msg)
 {
@@ -701,31 +733,30 @@ int update(struct ubus_context *ctx, struct ubus_object *obj,
 	return 0;
 }
 
-struct ubus_method dongle_object_methods[] = {
+static struct ubus_method dongle_object_methods[] = {
 	UBUS_METHOD_NOARG("test", test),
 	UBUS_METHOD_NOARG("list", print_list),
 	UBUS_METHOD_NOARG("clear", clear),
 	UBUS_METHOD("remove_device", remove_device, dev_policy),
 	UBUS_METHOD("alert", alert, usb_policy),
-	UBUS_METHOD_NOARG("update", update)
-	};
+	UBUS_METHOD_NOARG("update", update)};
 
-struct ubus_object_type dongle_object_type = UBUS_OBJECT_TYPE("dongle", dongle_object_methods);
+static struct ubus_object_type dongle_object_type = UBUS_OBJECT_TYPE("dongle", dongle_object_methods);
 
-struct ubus_object dongle_object = {
+static struct ubus_object dongle_object = {
 	.name = "dongle",
 	.type = &dongle_object_type,
 	.methods = dongle_object_methods,
 	.n_methods = ARRAY_SIZE(dongle_object_methods),
 };
 
-void uloop_add_get_devices(struct uloop_timeout *t)
+static void uloop_add_get_devices(struct uloop_timeout *t)
 {
 	uloop_timeout_set(t, 60000);
 	uloop_timeout_add(t);
 }
 
-void init_ubus(void)
+static void init_ubus(void)
 {
 	global_ctx = ubus_connect(NULL);
 	if (!global_ctx) {
@@ -735,7 +766,7 @@ void init_ubus(void)
 	ubus_add_uloop(global_ctx);
 }
 
-int publish_object(struct ubus_context *ctx)
+static int publish_object(struct ubus_context *ctx)
 {
 	int rv;