diff --git a/Android.mk b/Android.mk
index fe7addf..8719549 100644
--- a/Android.mk
+++ b/Android.mk
@@ -12,17 +12,23 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+SAM_ROOT := $(call my-dir)
+
 ifeq ($(TARGET_BOARD_PLATFORM),exynos4)
 ifeq ($(TARGET_SOC),exynos4210)
-include hardware/samsung/exynos4210.mk
+include $(SAM_ROOT)/exynos4210.mk
 endif
 ifeq ($(TARGET_SOC),exynos4x12)
-include hardware/samsung/exynos4x12.mk
+include $(SAM_ROOT)/exynos4x12.mk
 endif
 endif
 
 ifeq ($(TARGET_BOARD_PLATFORM),s5pc110)
 ifneq ($(TARGET_BOOTLOADER_BOARD_NAME),herring)
-include hardware/samsung/s5pc110.mk
+include $(SAM_ROOT)/s5pc110.mk
 endif
 endif
+
+ifeq ($(BOARD_HAVE_SAMSUNG_WIFI),true)
+include $(SAM_ROOT)/macloader/Android.mk
+endif
diff --git a/exynos4210.mk b/exynos4210.mk
index 527891e..218ad62 100644
--- a/exynos4210.mk
+++ b/exynos4210.mk
@@ -16,8 +16,8 @@
 ifeq ($(TARGET_SOC),exynos4210)
 
 include $(TARGET_HAL_PATH)/Android.mk
-include hardware/samsung/exynos/multimedia/Android.mk
-include hardware/samsung/exynos4/exynos4210/Android.mk
+include $(SAM_ROOT)/exynos/multimedia/Android.mk
+include $(SAM_ROOT)/exynos4/exynos4210/Android.mk
 
 endif
 endif
diff --git a/exynos4x12.mk b/exynos4x12.mk
index 9c1960e..affa728 100644
--- a/exynos4x12.mk
+++ b/exynos4x12.mk
@@ -16,9 +16,9 @@
 ifeq ($(TARGET_SOC),exynos4x12)
 
 include $(TARGET_HAL_PATH)/Android.mk
-include hardware/samsung/exynos/multimedia/Android.mk
-include hardware/samsung/exynos4/exynos4x12/Android.mk
-include hardware/samsung/exynos4/ril/Android.mk
+include $(SAM_ROOT)/exynos/multimedia/Android.mk
+include $(SAM_ROOT)/exynos4/exynos4x12/Android.mk
+include $(SAM_ROOT)/exynos4/ril/Android.mk
 
 endif
 endif
diff --git a/macloader/Android.mk b/macloader/Android.mk
new file mode 100644
index 0000000..22cc88d
--- /dev/null
+++ b/macloader/Android.mk
@@ -0,0 +1,17 @@
+ifeq ($(BOARD_HAVE_SAMSUNG_WIFI),true)
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := \
+    macloader.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+    liblog libutils
+
+LOCAL_MODULE := macloader
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_EXECUTABLE)
+
+endif
diff --git a/macloader/macloader.cpp b/macloader/macloader.cpp
new file mode 100644
index 0000000..c382912
--- /dev/null
+++ b/macloader/macloader.cpp
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2012, The CyanogenMod Project
+ *                     Daniel Hillenbrand <codeworkx@cyanogenmod.com>
+ *                     Marco Hillenbrand <marco.hillenbrand@googlemail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <cutils/log.h>
+
+#define LOG_TAG "macloader"
+#define LOG_NDEBUG 0
+
+#define MACADDR_PATH "/efs/wifi/.mac.info"
+#define CID_PATH "/data/.cid.info"
+
+enum Type {
+    NONE,
+    MURATA,
+    SEMCOSH,
+    SEMCOVE
+};
+
+/*
+ * murata:
+ * 00:37:6d
+ * 88:30:8a
+ *
+ * semcosh:
+ * 5c:0a:5b
+ *
+ */
+
+int main() {
+    FILE* file;
+    FILE* cidfile;
+    char* str;
+    char mac_addr_half[9];
+    int ret = -1;
+    int amode;
+    enum Type type = NONE;
+
+    /* open mac addr file */
+    file = fopen(MACADDR_PATH, "r");
+    if(file == 0) {
+        fprintf(stderr, "open(%s) failed\n", MACADDR_PATH);
+        ALOGE("Can't open %s\n", MACADDR_PATH);
+        return -1;
+    }
+
+    /* get and compare mac addr */
+    str = fgets(mac_addr_half, 9, file);
+    if(str == 0) {
+        fprintf(stderr, "fgets() from file %s failed\n", MACADDR_PATH);
+        ALOGE("Can't read from %s\n", MACADDR_PATH);
+        return -1;
+    }
+
+    /* murata */
+    if(strncasecmp(mac_addr_half, "00:37:6d", 9) == 0 ||
+        strncasecmp(mac_addr_half, "88:30:8a", 9) == 0 ||
+        strncasecmp(mac_addr_half, "20:02:af", 9) == 0) {
+        type = MURATA;
+    }
+
+    /* semcosh */
+    if(strncasecmp(mac_addr_half, "5c:0a:5b", 9) == 0) {
+        type = SEMCOSH;
+    }
+
+    if (type != NONE) {
+        /* open cid file */
+        cidfile = fopen(CID_PATH, "w");
+        if(cidfile == 0) {
+            fprintf(stderr, "open(%s) failed\n", CID_PATH);
+            ALOGE("Can't open %s\n", CID_PATH);
+            return -1;
+        }
+
+        switch(type) {
+            case NONE:
+                return -1;
+            break;
+            case MURATA:
+                /* write murata to cid file */
+                ALOGI("Writing murata to %s\n", CID_PATH);
+                ret = fputs("murata", cidfile);
+            break;
+            case SEMCOSH:
+                /* write semcosh to cid file */
+                ALOGI("Writing semcosh to %s\n", CID_PATH);
+                ret = fputs("semcosh", cidfile);
+            break;
+            case SEMCOVE:
+                /* write semcove to cid file */
+                ALOGI("Writing semcove to %s\n", CID_PATH);
+                ret = fputs("semcove", cidfile);
+            break;
+         }
+
+        if(ret != 0) {
+            fprintf(stderr, "fputs() to file %s failed\n", CID_PATH);
+            ALOGE("Can't write to %s\n", CID_PATH);
+            return -1;
+        }
+        fclose(cidfile);
+
+        /* set permissions on cid file */
+        ALOGD("Setting permissions on %s\n", CID_PATH);
+        amode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
+        ret = chmod(CID_PATH, amode);
+
+        char* chown_cmd = (char*) malloc(strlen("chown system ") + strlen(CID_PATH));
+        char* chgrp_cmd = (char*) malloc(strlen("chgrp system ") + strlen(CID_PATH));
+        sprintf(chown_cmd, "chown system %s", CID_PATH);
+        sprintf(chgrp_cmd, "chgrp system %s", CID_PATH);
+        system(chown_cmd);
+        system(chgrp_cmd);
+
+        if(ret != 0) {
+            fprintf(stderr, "chmod() on file %s failed\n", CID_PATH);
+            ALOGE("Can't set permissions on %s\n", CID_PATH);
+            return ret;
+        }
+
+    } else {
+        /* delete cid file if no specific type */
+        ALOGD("Deleting file %s\n", CID_PATH);
+        remove(CID_PATH);
+    }
+    fclose(file);
+    return 0;
+}
diff --git a/s5pc110.mk b/s5pc110.mk
index c4f5e0e..c8bc354 100644
--- a/s5pc110.mk
+++ b/s5pc110.mk
@@ -14,6 +14,6 @@
 
 ifeq ($(TARGET_BOARD_PLATFORM),s5pc110)
 
-include hardware/samsung/exynos3/s5pc110/Android.mk
+include $(SAM_ROOT)/exynos3/s5pc110/Android.mk
 
 endif
