diff a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,24 @@
 #include config.mk
+DESTDIR ?=
+SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
+ARCH ?= $(SUBARCH)
+PWD ?= $(shell pwd)
+SHELL := /bin/sh
+CC := gcc
+CROSS_COMPILE ?=
+PWD ?= $(shell pwd)
+
+KVER ?= $(shell uname -r)
+KSRC ?= /lib/modules/$(KVER)/build
+MODDESTDIR ?= /lib/modules/$(KVER)/kernel/3rdparty/rt3290/
+INSTALL_PREFIX ?=
+KDIR := /lib/modules/$(KVER)/build
 
 CONFIG_RTBTH = m
-MOD_NAME = rtbth
-MDIR = kernel/drivers/bluetooth
-obj-$(CONFIG_RTBTH) := $(MOD_NAME).o
-$(MOD_NAME)-objs := rtbth_core_main.o \
+MODULE_NAME := rtbth
+
+obj-$(CONFIG_RTBTH) := $(MODULE_NAME).o
+$(MODULE_NAME)-objs := rtbth_core_main.o \
 					rtbth_core_init.o \
 					rtbth_core_pci.o \
 					rtbth_core_bluez.o \
@@ -17,20 +31,45 @@
 ccflags-y += -DDBG -DRT3298 -DRTBT_IFACE_PCI -DLINUX
 
 MAKE = make
-LINUX_SRC ?= /lib/modules/$(shell uname -r)/build
-PWD := $(shell pwd)
 
-all:
-	$(MAKE) -C $(LINUX_SRC) M=$(PWD) modules
+.PHONY: all
+.PHONY: modules
+.PHONY: install
+.PHONY: clean
+
+all: modules
+
+modules:
+
+	$(MAKE) -C $(KDIR) M=$(PWD) modules
+
+install:
+
+	mkdir -p $(MODDESTDIR)
+	install -p -m 644 $(MODULE_NAME).ko  $(MODDESTDIR)
+	xz -f $(MODDESTDIR)/$(MODULE_NAME).ko
+	depmod -a $(KVER)
+
+.PHONY: unistall
+
+uninstall:
+
+	rm -f $(MODDESTDIR)/$(MODULE_NAME).ko*
+	depmod -a $(KVER)
+
 
 clean:
-	$(MAKE) -C $(LINUX_SRC) M=$(PWD) clean
 
-install:
-	#$(MAKE) INSTALL_MOD_PATH=$(DESTDIR) INSTALL_MOD_DIR=$(MDIR) \
-	#	-C $(LINUX_SRC) M=$(PWD) modules_install
-	#depmod -a
-	## uncomment the three lines above if you wanna use `make install` instead of dkms
-	install -m 0755 -o root -g root tools/49rtbt $(DESTDIR)/usr/lib/pm-utils/sleep.d/
-	install -m 0755 -o root -g root tools/rtbt $(DESTDIR)/usr/bin/
-	install -m 0644 -o root -g root tools/ralink-bt.conf $(DESTDIR)/etc/modprobe.d/
+	$(MAKE) -C $(KSRC) M=$(shell pwd) clean
+	cd hal ; rm -fr */*/*/*.mod.c */*/*/*.mod */*/*/*.o */*/*/.*.cmd */*/*/*.ko*
+	cd hal ; rm -fr */*/*.mod.c */*/*.mod */*/*.o */*/.*.cmd */*/*.ko*
+	cd hal ; rm -fr */*.mod.c */*.mod */*.o */.*.cmd */*.ko*
+	cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
+	cd core ; rm -fr */*.mod.c */*.mod */*.o */.*.cmd */*.ko*
+	cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
+	cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
+	cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
+	cd platform ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko*
+	rm -fr Module.symvers ; rm -fr Module.markers ; rm -fr modules.order
+	rm -fr *.mod.c *.mod *.o .*.cmd *.ko* *~
+	rm -fr .tmp_versions

diff a/rtbt_ctrl.h b/rtbt_ctrl.h
--- a/rtbt_ctrl.h
+++ b/rtbt_ctrl.h
@@ -39,7 +39,7 @@
 #include "rtbt_asic.h"
 #include "rtbt_thread.h"
 //#include <rtbth_chip.h>
-#include <rtbth_chip.h>
+#include "rtbth_chip.h"
 #include "trace.h"
 
 #include <linux/timer.h>

diff a/rtbt_type.h b/rtbt_type.h
--- a/rtbt_type.h
+++ b/rtbt_type.h
@@ -28,7 +28,7 @@
 #define __RTBT_TYPE_H
 
 #ifdef __GNUC__
-#include <stdarg.h>
+#include <linux/stdarg.h>
 #endif // __GNUC__ //
 
 typedef signed char		INT8;
 
diff a/rtbth_3298.h b/rtbth_3298.h
--- a/rtbth_3298.h
+++ b/rtbth_3298.h
@@ -27,7 +27,7 @@
 #ifndef _RTBTH_3298_H
 #define _RTBTH_3298_H
 
-#include <rt3298_iomap.h>
+#include "rt3298_iomap.h"
 
 struct rtbt_dev_entry;

diff a/rtbth_chip.h b/rtbth_chip.h 
--- a/rtbth_chip.h
+++ b/rtbth_chip.h
@@ -28,7 +28,7 @@
 #define _RTBTH_CHIP_H
 
 #ifdef RT3298
-#include <rtbth_3298.h>
+#include "rtbth_3298.h"
 #endif // RT3298 //
 
 #endif

diff a/rtbth_core_main.c b/rtbth_core_main.c
--- a/rtbth_core_main.c
+++ b/rtbth_core_main.c
@@ -26,7 +26,7 @@
 
 #include <linux/init.h>
 #include <linux/module.h>
-#include "include/rtbth_dbg.h"
+#include "rtbth_dbg.h"
 #include "rtbt_osabl.h"
 #include "rtbth_3298.h"
 #include "rtbt_ctrl.h"

diff a/rtbth_hlpr_dbg.c b/rtbth_hlpr_dbg.c
--- a/rtbth_hlpr_dbg.c
+++ b/rtbth_hlpr_dbg.c
@@ -25,7 +25,7 @@
 *************************************************************************/
 
 #include "rtbth_dbg.h"
-#include "include/rt_linux.h"
+#include "rt_linux.h"
 
 //
 // Global debug error level

diff a/rtbth_hlpr_linux.c b/rtbth_hlpr_linux.c
--- a/rtbth_hlpr_linux.c
+++ b/rtbth_hlpr_linux.c
@@ -24,8 +24,8 @@
 *                                                                       *
 *************************************************************************/
 
-#include "include/rtbt_osabl.h"
-#include "include/rt_linux.h"
+#include "rtbt_osabl.h"
+#include "rt_linux.h"
 
 static DEFINE_SPINLOCK(g_reslock);
 
