diff --git a/bdAddrLoader/addrloader.c b/bdAddrLoader/addrloader.c
index b1d2d81..be0d5b1 100644
--- a/bdAddrLoader/addrloader.c
+++ b/bdAddrLoader/addrloader.c
@@ -32,12 +32,46 @@
 #define BD_ADDR_LEN  6
 #define BD_ADDR_STR_LEN 18
 
-#define FTM_PATH_COMMON "/persist"
-#define FTM_PATH_BT_ADDR "bluetooth/.bdaddr"
-#define FTM_PATH_WIFI_ADDR "wifi/.wlanaddr"
+
+#define ARG_TYPE_PATH_FILE  0x11
+#define ARG_TYPE_PATH_PROP  0x12
+
+#define ARG_TYPE_DATA_HEX   0x21
+#define ARG_TYPE_DATA_ASCII 0x22
+
+typedef struct _ArgEl
+{
+   const char *szSrc;    // Source Path
+   int nPathType;        // Type of Source Path
+   int nDataType;        // Type of Data
+}ArgEl;
+
+typedef ArgEl InArg;
 
 #define DEFAULT_BDADDR_PROP "persist.service.bdroid.bdaddr"
 
+typedef struct _OutArg
+{
+   ArgEl dest;
+   char  cSeperator;    // a character to be used for sperating like ':' of "XX:XX:XX:XX:XX:XX"
+   char  bPrintOut;     // Print out bd addr in standard out or not
+}OutArg;
+
+typedef struct _LoadedData
+{
+    union {
+       unsigned char bin[BD_ADDR_LEN];
+       char sz[BD_ADDR_STR_LEN];
+    }data;
+    int nDataType;
+}LoadedBDAddr;
+
+typedef enum _res
+{
+    SUCCESS = 0,
+    FAIL
+}Res;
+
 int hexa_to_ascii(const unsigned char* hexa, char* ascii, int nHexLen)
 {
     int i, j;
@@ -51,7 +85,9 @@
 
     ascii[nHexLen*2] = '\0';
 
-    return 0;
+    ALOGI("hex_to_ascii() - converted Data (%s)", ascii);
+
+    return SUCCESS;
 }
 
 int readBDAddrData(const char* szFilePath, unsigned char* addrData, int nDataLen)
@@ -62,16 +98,16 @@
 
     if(nFd < 0){
         ALOGW("There is no Address File in FTM area : %s\n", szFilePath);
-        return 1;
+        return FAIL;
     }
 
     nRdCnt = read(nFd, addrData, nDataLen);
     if(nRdCnt != nDataLen){
         ALOGE("Fail to read Address data from FTM area\n");
         close(nFd);
-        return 1;
+        return FAIL;
     }
-    return 0;
+    return SUCCESS;
 }
 
 void formattingBdAddr(char *szBDAddr, const char cSep)
@@ -87,27 +123,149 @@
     }
 }
 
+int readBDAddr(InArg inArg, LoadedBDAddr *loadedBDAddr)
+{
+    Res res = FAIL;
+    unsigned char addrData[BD_ADDR_LEN] = {0,};
+    int nDataLen = 0;
+
+    ALOGI("Read From %s by Path type(0x%2x), Data type (0x%2x)", inArg.szSrc, inArg.nPathType, inArg.nDataType);
+
+
+    if(inArg.nPathType == ARG_TYPE_PATH_FILE){
+        switch(inArg.nDataType){
+            case ARG_TYPE_DATA_HEX:
+                if(!readBDAddrData(inArg.szSrc, loadedBDAddr->data.bin, BD_ADDR_LEN)){
+                    loadedBDAddr->nDataType = ARG_TYPE_DATA_HEX;
+                    return SUCCESS;
+                }
+                break;
+            case ARG_TYPE_DATA_ASCII:
+               if(!readBDAddrData(inArg.szSrc, (unsigned char *)loadedBDAddr->data.sz, BD_ADDR_STR_LEN)){
+                    loadedBDAddr->nDataType = ARG_TYPE_DATA_ASCII;
+                    return SUCCESS;
+                }
+                break;
+            default:
+                return FAIL;
+        }
+    }else if(inArg.nPathType == ARG_TYPE_PATH_PROP){
+        switch(inArg.nDataType){
+            case ARG_TYPE_DATA_HEX:
+                if(property_get(inArg.szSrc, (char *)loadedBDAddr->data.bin, "")>=0){
+                    loadedBDAddr->nDataType = ARG_TYPE_DATA_HEX;
+                    return SUCCESS;
+                }
+                break;
+            case ARG_TYPE_DATA_ASCII:
+                if(property_get(inArg.szSrc, loadedBDAddr->data.sz, "")>=0){
+                    loadedBDAddr->nDataType = ARG_TYPE_DATA_ASCII;
+                    return SUCCESS;
+                }
+                break;
+            default:
+                return FAIL;
+        }
+    }else{
+        ALOGE("Error invalid argument : (%d)", inArg.nPathType);
+    }
+
+    ALOGE("Fail to read BDAddr from %s", inArg.szSrc);
+    return FAIL;
+}
+
+int writeBDAddr(OutArg outArg, LoadedBDAddr *loadedBDAddr)
+{
+    char szTmp[BD_ADDR_STR_LEN] = {0,};
+
+    ALOGI("Output Data type(0x%2x), bPrintout(%d), bPath(%s)",
+        outArg.dest.nDataType, outArg.bPrintOut, outArg.dest.szSrc);
+
+    ALOGI("Loaded Data type(0x%2x)", loadedBDAddr->nDataType);
+
+    if(outArg.dest.nDataType == ARG_TYPE_DATA_ASCII
+        && loadedBDAddr->nDataType == ARG_TYPE_DATA_HEX
+    ){
+        if(!hexa_to_ascii(loadedBDAddr->data.bin, szTmp, BD_ADDR_LEN)){
+            memcpy(loadedBDAddr->data.sz, szTmp, BD_ADDR_STR_LEN);
+            loadedBDAddr->nDataType = ARG_TYPE_DATA_ASCII;
+        }
+        else{
+            ALOGE("Fail to convert data");
+            return FAIL;
+        }
+    }
+
+    if(loadedBDAddr->nDataType == ARG_TYPE_DATA_ASCII){
+       // check out which addr data is already formated
+       if(strchr(loadedBDAddr->data.sz, '.') == NULL
+         && strchr(loadedBDAddr->data.sz, ':') == NULL
+       ){
+           formattingBdAddr(loadedBDAddr->data.sz, outArg.cSeperator);
+       }
+    }
+    // print out szBDAddr
+    if(outArg.bPrintOut
+        && loadedBDAddr->nDataType == ARG_TYPE_DATA_ASCII
+        && strlen(loadedBDAddr->data.sz)==(BD_ADDR_STR_LEN-1)) {
+       printf("%s",loadedBDAddr->data.sz);
+       if (property_set(DEFAULT_BDADDR_PROP, loadedBDAddr->data.sz) < 0)
+           ALOGE("Failed to set address in prop %s", DEFAULT_BDADDR_PROP);
+    }
+    else{
+       ALOGE("Invalid Data is loaded : %s", loadedBDAddr->data.sz);
+       return FAIL;
+    }
+    // TODO :: writing File or Property
+    return SUCCESS;
+}
+
 int main(int argc, char *argv[])
 {
     int nFd, nRdCnt;
-    char szFilePath[FILE_PATH_MAX] = {0,};
-    unsigned char addrData[BD_ADDR_LEN] = {0,};
-    char szBDAddr[BD_ADDR_STR_LEN] = {0,};
-    char *szBDAddrPath = NULL;
-    char *szProperty = NULL;
-    char bStdOut = 0;
     int c;
 
-    while((c=getopt(argc, argv, ":i:o:p")) != -1){
+    InArg inArg;
+    OutArg outArg;
+    LoadedBDAddr loadedBDAddr;
+
+    //initialize arg
+    memset(&inArg, 0, sizeof(InArg));
+    memset(&outArg, 0, sizeof(OutArg));
+    memset(&loadedBDAddr, 0, sizeof(LoadedBDAddr));
+
+    //load args;
+    while((c=getopt(argc, argv, ":f:p:hsx")) != -1){
         switch(c){
-            case 'i': // input file path
-                szBDAddrPath = optarg;
+            case 'f': // input path
+                if(optarg != NULL){
+                    ALOGI("option : f=%s", optarg);
+                    inArg.szSrc = optarg;
+                }else{
+                    ALOGW("Invalid Argument(%s) of input path", optarg);
+                }
+                inArg.nPathType = ARG_TYPE_PATH_FILE;
                 break;
-            case 'o': // output : property name
-                szProperty = optarg;
+            case 'p': // output path
+                if(optarg != NULL){
+                    ALOGI("option : p=%s", optarg);
+                    inArg.szSrc = optarg;
+                }else{
+                    ALOGW("Invalid Argument(%s) of out Path", optarg);
+                }
+                inArg.nPathType = ARG_TYPE_PATH_PROP;
                 break;
-            case 'p':
-                bStdOut = 1;
+            case 'h': // data type to be read is hex
+                ALOGI("option : h");
+                inArg.nDataType = ARG_TYPE_DATA_HEX;
+                break;
+            case 's': // data type to be read is ascii
+                ALOGI("option : s");
+                inArg.nDataType = ARG_TYPE_DATA_ASCII;
+                break;
+            case 'x':
+                ALOGI("option : x");
+                outArg.bPrintOut = 1; //true
                 break;
             default:
                 ALOGW("Unknown option : %c", c);
@@ -115,26 +273,20 @@
         }
     }
 
-    if(szBDAddrPath == NULL){
-        //set default bd address path
-        sprintf(szFilePath, "%s/%s", FTM_PATH_COMMON, FTM_PATH_BT_ADDR);
-        szBDAddrPath = szFilePath;
+    // setting up Arguments with default value
+    outArg.cSeperator = ':';
+    outArg.dest.nDataType = ARG_TYPE_DATA_ASCII;
+
+    // load bd addr and print out bd addr in formated ascii
+    if(readBDAddr(inArg, &loadedBDAddr)){
+        ALOGE("Fail to load data !!");
+        return FAIL;
     }
 
-    if(!readBDAddrData(szBDAddrPath, addrData, BD_ADDR_LEN)){
-        if(!hexa_to_ascii(addrData, szBDAddr, BD_ADDR_LEN)){
-            formattingBdAddr(szBDAddr, ':');
-            // write loaded bdaddr to property
-            if(szProperty != NULL) property_set(szProperty, szBDAddr);
-            // print out szBDAddr
-            if(bStdOut) printf("%s",szBDAddr);
-            if (property_set(DEFAULT_BDADDR_PROP, szBDAddr) < 0)
-                ALOGE("Failed to set address in prop %s", DEFAULT_BDADDR_PROP);
-            return 0;
-        }
-        else{
-            ALOGE("Fail to convert data from hex to ascii");
-        }
+    if(writeBDAddr(outArg, &loadedBDAddr)){
+        ALOGE("Fail to write data !!");
+        return FAIL;
     }
+
     return 1;
 }
diff --git a/init.mako.bt.sh b/init.mako.bt.sh
index 0111434..4fdd065 100644
--- a/init.mako.bt.sh
+++ b/init.mako.bt.sh
@@ -25,12 +25,19 @@
 
 POWER_CLASS=`getprop qcom.bt.dev_power_class`
 TRANSPORT=`getprop ro.qualcomm.bt.hci_transport`
+DUTADDR=`getprop net.btdut.address`
 
 #find the transport type
 logi "Transport : $TRANSPORT"
+logi "DUTADDR : $DUTADDR"
 
 #load bd addr
-BDADDR=`/system/bin/bdAddrLoader -p`
+if [$DUTADDR == ""]
+then
+BDADDR=`/system/bin/bdAddrLoader -f /persist/bluetooth/.bdaddr -h -x`
+else
+BDADDR=`/system/bin/bdAddrLoader -p net.btdut.address -s -x`
+fi
 
 setprop bluetooth.status off
 
@@ -48,15 +55,15 @@
      logi "Power Class: To override, Before turning BT ON; setprop qcom.bt.dev_power_class <1 or 2 or 3>";;
 esac
 
-if ["$BDADDR" == ""]
+if [$BDADDR == ""]
 then
-  logwrapper /system/bin/hci_qcomm_init -e $PWR_CLASS -vv
+logwrapper /system/bin/hci_qcomm_init -e $PWR_CLASS -vv
 else
-  logwrapper /system/bin/hci_qcomm_init -b $BDADDR -e $PWR_CLASS -vv
+logwrapper /system/bin/hci_qcomm_init -b $BDADDR -e $PWR_CLASS -vv
 fi
 
 case $? in
-  0) logi "Bluetooth QSoC firmware download succeeded, $BTS_DEVICE $BTS_TYPE $BTS_BAUD $BTS_ADDRESS";;
+  0) logi "Bluetooth QSoC firmware download succeeded, $PWR_CLASS $BDADDR $TRANSPORT";;
   *) failed "Bluetooth QSoC firmware download failed" $exit_code_hci_qcomm_init;
      setprop bluetooth.status off;
      exit $exit_code_hci_qcomm_init;;
diff --git a/init.mako.rc b/init.mako.rc
index 25d20ff..8fb269b 100644
--- a/init.mako.rc
+++ b/init.mako.rc
@@ -407,7 +407,7 @@
     group system wifi
     oneshot
 
-service bdAddrLoader /system/bin/bdAddrLoader -p
+service bdAddrLoader /system/bin/bdAddrLoader -f /persist/bluetooth/.bdaddr -h -x
     class main
     user bluetooth
     group system bluetooth
