diff --git a/debian/10-set-mac-addresses b/debian/10-set-mac-addresses
index 83b2c39..550a7ea 100755
--- a/debian/10-set-mac-addresses
+++ b/debian/10-set-mac-addresses
@@ -16,16 +16,14 @@
 import sys
 
 
-MAC_VENDOR_PREFIX_STR = '70:20:84'
-
 BD_ADDR_PATH = '/etc/bluetooth/.bt_nv.bin'
 WIFI_ADDR_PATH = '/lib/firmware/wlan/wlan_mac.bin'
 
 BD_NVITEM = 0x02
 BD_RDWR_PROT = 0x00
 BD_NVITEM_SIZE = 0x06
-BD_ADDR_HEADER_STRUCT = r'BBB'
-BD_ADDR_MAC_STRUCT = r'BBBBBB'
+BD_ADDR_HEADER_STRUCT = r'<BBB'
+BD_ADDR_MAC_STRUCT = r'HHH'
 
 WIFI_CONFIG_TEMPLATE = '''\
 Intf0MacAddress={0}
@@ -43,27 +41,28 @@
     any other checking done.
 
     Parameters:
-      mac_address_str: string. Colon-separated six-octet hexidecimal MAC address.
+      mac_address_str: string. Colon-separated six-octet hexadecimal MAC address.
 
     Returns:
       string. The next MAC address in the sequence.
     '''
+    vendor_prefix = GetMacDevicePrefixString(mac_address_str)
     device_suffix = GetMacDeviceSuffixString(mac_address_str)
     suffix_number = MacDeviceSuffixToNumber(device_suffix)
     suffix_string = MacDeviceSuffixNumberToString(suffix_number + 1)
-    next_mac = MAC_VENDOR_PREFIX_STR + ':' + suffix_string
+    next_mac = vendor_prefix + ':' + suffix_string
     return next_mac
 
 
 def MacDeviceSuffixNumberToString(device_suffix_number):
-    '''Given a device suffix number, generate a colon-separated hexidecimal
+    '''Given a device suffix number, generate a colon-separated hexadecimal
     representation.
 
     Parameters:
       device_suffix_number: integer. The number to convert into a MAC suffix.
 
     Returns:
-      string. The colon-separated hexidecimal version of the number passed in.
+      string. The colon-separated hexadecimal version of the number passed in.
     '''
     suffix_string = '%06x' % device_suffix_number
     suffix_array = []
@@ -75,16 +74,23 @@
 
 
 def MacDeviceSuffixToNumber(mac_suffix):
-    '''Converts a given a three-octet colon separated hexidecimal MAC device suffix
+    '''Converts a given a three-octet colon separated hexadecimal MAC device suffix
     into an integer.'''
     mac_array = mac_suffix.split(':')
     flatmac = ''.join(mac_array)
     return int(flatmac, 16)
 
 
+def GetMacDevicePrefixString(mac_address):
+    '''Return the vendor prefix from a given a full six-octet colon separated
+    hexadecimal MAC.'''
+    mac_array = mac_address.split(':')
+    return ':'.join(mac_array[:3])
+
+
 def GetMacDeviceSuffixString(mac_address):
     '''Strip the vendor prefix from a given a full six-octet colon separated
-    hexidecimal MAC.'''
+    hexadecimal MAC.'''
     mac_array = mac_address.split(':')
     return ':'.join(mac_array[3:])
 
@@ -103,7 +109,7 @@
         if len(address) == 0:
             return None
         address = address[:-1]
-        return address
+        return address.lower()
     except Exception as e:
         print('Error reading %s: %s' % (sysfs_path, e))
         return None
@@ -123,12 +129,17 @@
 def WriteBluetoothMacAddress(next_mac):
     '''Writes the given MAC address string to a binary file readable by Bluez.'''
     mac_bytes = [int(x, 16) for x in next_mac.split(':')]
+    even_bytes = mac_bytes[0::2]
+    odd_bytes = mac_bytes[1::2]
+    zipped_bytes = zip(even_bytes, odd_bytes)
+    mac_bytes = [(x << 8) + y for x, y in zipped_bytes]
+    mac_bytes.reverse()
 
     try:
         with open(BD_ADDR_PATH, 'w') as fp:
-            fp.write(struct.pack(BD_ADDR_HEADER_STRUCT, BD_NVITEM, BD_RDWR_PROT,
-                                 BD_NVITEM_SIZE))
-            fp.write(struct.pack(BD_ADDR_MAC_STRUCT, *mac_bytes))
+            fp.write(struct.pack(BD_ADDR_HEADER_STRUCT + BD_ADDR_MAC_STRUCT,
+                                 BD_NVITEM, BD_RDWR_PROT, BD_NVITEM_SIZE,
+                                 *mac_bytes))
         return True
     except Exception as e:
         print('Error writing bluetooth configuration to %s: %s' % (BD_ADDR_PATH, e))
@@ -136,11 +147,9 @@
 
 def IsDVTMacAddress(base_mac_address):
     '''Checks to see if the given MAC address is within the allocated DVT range.'''
-    dvt_mac_start = MacDeviceSuffixToNumber('51:F7:6E')
-    dvt_mac_end   = MacDeviceSuffixToNumber('51:FA:1B')
-    mac_suffix    = MacDeviceSuffixToNumber(GetMacDeviceSuffixString(base_mac_address))
+    prefix_string = GetMacDevicePrefixString(base_mac_address)
 
-    if mac_suffix >= dvt_mac_start and mac_suffix <= dvt_mac_end:
+    if prefix_string == 'f4:f5:e8':
         return True
 
     return False
diff --git a/debian/changelog b/debian/changelog
index d6da262..32ccc55 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,15 @@
-imx-board-wlan (3-1) UNRELEASED; urgency=medium
+imx-board-wlan (4-1) UNRELEASED; urgency=medium
 
   * Build qcacld-2.0 module out of tree
   * Restructure package a bit
 
- -- Coral <coral-support@google.com>  Mon, 24 Jun 2019 13:42:26 -0700
+ -- Coral <coral-support@google.com>  Mon, 15 Jul 2019 13:42:26 -0700
+
+imx-board-wlan (3-1) mendel-chef; urgency=medium
+
+  * Fix to the MAC address vendor script.
+
+ -- Coral <coral-support@google.com>  Tue, 09 Jul 2019 17:08:25 -0700
 
 imx-board-wlan (2-1) mendel-chef; urgency=medium
 
@@ -14,7 +20,7 @@
 imx-board-wlan (1-1) mendel-beaker; urgency=medium
 
   * Cut for beaker release and normalization of version.
-  
+
  -- Coral <coral-support@google.com>  Wed, 16 Jan 2019 12:00:00 -0800
 
 imx-board-wlan (0.1) UNRELEASED; urgency=medium
