diff --git a/bin/user/netatmo.py b/bin/user/netatmo.py
index e5a9625..1e3e279 100644
--- a/bin/user/netatmo.py
+++ b/bin/user/netatmo.py
@@ -144,6 +144,7 @@ def __init__(self, **stn_dict):
         loginf("driver version is %s" % DRIVER_VERSION)
         self.sensor_map = stn_dict.get(
             'sensor_map', NetatmoDriver.DEFAULT_SENSOR_MAP)
+        loginf('sensor map is %s' % self.sensor_map)
         device_id = stn_dict.get('device_id', None)
         mode = stn_dict.get('mode', 'cloud')
         if mode.lower() == 'sniff':
@@ -188,7 +189,7 @@ def genLoopPackets(self):
     def data_to_packet(self, data):
         # convert netatmo data to format for database
         packet = dict()
-        packet['dateTime'] = data.pop('dateTime', int(time.time() + 0.5))
+        packet['dateTime'] = int(time.time() + 0.5)
         packet['usUnits'] = weewx.METRIC
         for n in self.sensor_map:
             label = self._find_match(n, data.keys())
@@ -203,6 +204,8 @@ def _find_match(pattern, keylist):
             return None
         for k in keylist:
             kparts = k.split('.')
+            if len(kparts) != 3:
+                return None
             if (NetatmoDriver._part_match(pparts[0], kparts[0]) and
                 NetatmoDriver._part_match(pparts[1], kparts[1]) and
                 NetatmoDriver._part_match(pparts[2], kparts[2])):
@@ -317,24 +320,31 @@ def collect_data(self):
 
     @staticmethod
     def get_data(sd, device_id):
-        """Query the server for each device and module, put data on the queue"""
+        """Query the server for each device and module, put data on queue"""
         raw_data = sd.get_data(device_id)
         units_dict = dict((x, raw_data['user']['administrative'][x])
                           for x in CloudClient.UNITS)
         logdbg('cloud units: %s' % units_dict)
+        # i would prefer to do partial packets, but there is no guarantee that
+        # the timestamps will not align.  so aggregate into a single packet,
+        # and let the driver figure out what timestamp it wants to put on it.
+        alldata = dict() # single dict with all devices and modules
         for d in raw_data['devices']:
             data = CloudClient.extract_data(d, units_dict)
             data = CloudClient.apply_labels(data, d['_id'], d['type'])
-            Collector.queue.put(data)
+            alldata.update(data)
+#            Collector.queue.put(data)
             for m in d['modules']:
                 data = CloudClient.extract_data(m, units_dict)
                 data = CloudClient.apply_labels(data, m['_id'], m['type'])
-                Collector.queue.put(data)
+                alldata.update(data)
+#                Collector.queue.put(data)
+        Collector.queue.put(alldata)
 
     @staticmethod
     def extract_data(x, units_dict):
         """Extract data we care about from a device or module"""
-        data = {'dateTime': x['dashboard_data']['time_utc']}
+        data = {'time_utc': x['dashboard_data']['time_utc']}
         for n in CloudClient.META_ITEMS:
             if n in x:
                 data[n] = x[n]
@@ -342,6 +352,7 @@ def extract_data(x, units_dict):
             if n in x['dashboard_data']:
                 data[n] = x['dashboard_data'][n]
         # do any unit conversions - everything converts to weewx.METRIC
+# it looks like all the data are METRIC even when netatmo units say otherwise
 #        for n in data:
 #            try:
 #                func = CloudClient.CONVERSIONS.get(n)
@@ -355,14 +366,11 @@ def extract_data(x, units_dict):
     @staticmethod
     def apply_labels(data, xid, xtype):
         """Copy the data dict but use fully-qualified keys"""
-        new_data = dict()
-        for n in data:
-            # do not touch the timestamp
-            if n in ['dateTime']:
-                new_data[n] = data[n]
-            else:
-                new_data["%s.%s.%s" % (xid, xtype, n)] = data[n]
-        return new_data
+        return dict(("%s.%s.%s" % (xid, xtype, n), data[n]) for n in data)
+#        new_data = dict()
+#        for n in data:
+#            new_data["%s.%s.%s" % (xid, xtype, n)] = data[n]
+#        return new_data
 
     @staticmethod
     def _cvt_pressure(x, from_unit_dict):