diff --git a/EDMC.py b/EDMC.py
index bb272eb5..60a28cb9 100755
--- a/EDMC.py
+++ b/EDMC.py
@@ -105,10 +105,7 @@ try:
     print '%s,%s' % (data['lastSystem']['name'], data['lastStarport']['name'])
     (station_id, has_market, has_outfitting, has_shipyard) = EDDB.station(data['lastSystem']['name'], data['lastStarport']['name'])
 
-    if station_id and not (has_market or has_outfitting or has_shipyard):
-        sys.stderr.write("Station doesn't have anything!\n")
-        sys.exit(EXIT_SUCCESS)
-    elif not station_id and not (data['lastStarport'].get('commodities') or data['lastStarport'].get('modules')):	# Ignore usually spurious shipyard at unknown stations
+    if (args.m or args.o or args.s) and not (data['lastStarport'].get('commodities') or data['lastStarport'].get('modules')):	# Ignore possibly missing shipyard info
         sys.stderr.write("Station doesn't have anything!\n")
         sys.exit(EXIT_SUCCESS)
 
@@ -117,26 +114,23 @@ try:
             # Fixup anomalies in the commodity data
             session.fixup(data['lastStarport']['commodities'])
             commodity.export(data, COMMODITY_DEFAULT, args.m)
-        elif has_market:
-            sys.stderr.write("Error: Can't get market data!\n")
         else:
             sys.stderr.write("Station doesn't have a market\n")
 
     if args.o:
-        if has_outfitting or not station_id:
+        if data['lastStarport'].get('modules'):
             outfitting.export(data, args.o)
         else:
             sys.stderr.write("Station doesn't supply outfitting\n")
 
     if args.s:
-        if has_shipyard:
-            if not data['lastStarport'].get('ships'):
-                sleep(SERVER_RETRY)
-                data = session.query()
-            if data['lastStarport'].get('ships') and data['commander'].get('docked'):
-                shipyard.export(data, args.s)
-            else:
-                sys.stderr.write("Couldn't retrieve shipyard info\n")
+        if has_shipyard and not data['lastStarport'].get('ships'):
+            sleep(SERVER_RETRY)
+            data = session.query()
+        if data['lastStarport'].get('ships'):
+            shipyard.export(data, args.s)
+        elif has_shipyard:
+            sys.stderr.write("Couldn't retrieve shipyard info\n")
         else:
             sys.stderr.write("Station doesn't have a shipyard\n")
 
diff --git a/EDMarketConnector.py b/EDMarketConnector.py
index 8cbef938..ddcda1b6 100755
--- a/EDMarketConnector.py
+++ b/EDMarketConnector.py
@@ -408,23 +408,13 @@ class AppWindow:
                     (station_id, has_market, has_outfitting, has_shipyard) = EDDB.station(self.system['text'], self.station['text'])
 
 
-                    # No EDDN output at known station?
-                    if (config.getint('output') & config.OUT_EDDN) and station_id and not (has_market or has_outfitting or has_shipyard):
+                    # No EDDN output?
+                    if (config.getint('output') & config.OUT_EDDN) and not (data['lastStarport'].get('commodities') or data['lastStarport'].get('modules')):	# Ignore possibly missing shipyard info
                         if not self.status['text']:
                             self.status['text'] = _("Station doesn't have anything!")
 
-                    # No EDDN output at unknown station?
-                    elif (config.getint('output') & config.OUT_EDDN) and not station_id and not (data['lastStarport'].get('commodities') or data['lastStarport'].get('modules')):	# Ignore usually spurious shipyard at unknown stations
-                        if not self.status['text']:
-                            self.status['text'] = _("Station doesn't have anything!")
-
-                    # No market output at known station?
-                    elif not (config.getint('output') & config.OUT_EDDN) and station_id and not has_market:
-                        if not self.status['text']:
-                            self.status['text'] = _("Station doesn't have a market!")
-
-                    # No market output at unknown station?
-                    elif not (config.getint('output') & config.OUT_EDDN) and not station_id and not data['lastStarport'].get('commodities'):
+                    # No market output?
+                    elif not (config.getint('output') & config.OUT_EDDN) and not data['lastStarport'].get('commodities'):
                         if not self.status['text']:
                             self.status['text'] = _("Station doesn't have a market!")
 
@@ -437,31 +427,18 @@ class AppWindow:
                             if config.getint('output') & config.OUT_BPC:
                                 commodity.export(data, COMMODITY_BPC)
 
-                        elif has_market and (config.getint('output') & (config.OUT_CSV|config.OUT_TD|config.OUT_BPC|config.OUT_EDDN)):
-                            # Overwrite any previous error message
-                            self.status['text'] = _("Error: Can't get market data!")
-
                         if config.getint('output') & config.OUT_EDDN:
                             old_status = self.status['text']
                             if not old_status:
                                 self.status['text'] = _('Sending data to EDDN...')
                             self.w.update_idletasks()
                             eddn.export_commodities(data)
-                            if has_outfitting or not station_id:
-                                # Only send if eddb says that the station provides outfitting, or unknown station
-                                eddn.export_outfitting(data)
-                            elif __debug__ and data['lastStarport'].get('modules'):
-                                print 'Spurious outfitting!'
-                            if has_shipyard:
-                                # Only send if eddb says that the station has a shipyard -
-                                # https://github.com/Marginal/EDMarketConnector/issues/16
-                                if data['lastStarport'].get('ships'):
-                                    eddn.export_shipyard(data)
-                                else:
-                                    # API is flakey about shipyard info - silently retry if missing (<1s is usually sufficient - 5s for margin).
-                                    self.w.after(int(SERVER_RETRY * 1000), self.retry_for_shipyard)
-                            elif __debug__ and data['lastStarport'].get('ships'):
-                                print 'Spurious shipyard!'
+                            eddn.export_outfitting(data)
+                            if has_shipyard and not data['lastStarport'].get('ships'):
+                                # API is flakey about shipyard info - silently retry if missing (<1s is usually sufficient - 5s for margin).
+                                self.w.after(int(SERVER_RETRY * 1000), self.retry_for_shipyard)
+                            else:
+                                eddn.export_shipyard(data)
                             if not old_status:
                                 self.status['text'] = ''
 
diff --git a/eddn.py b/eddn.py
index f210a269..f430cdc5 100644
--- a/eddn.py
+++ b/eddn.py
@@ -72,27 +72,28 @@ def export_commodities(data):
         })
 
 def export_outfitting(data):
-    # *Do* send empty modules list - implies station has no outfitting
-    schemakeys = ['category', 'name', 'mount', 'guidance', 'ship', 'class', 'rating']
-    modules = []
-    for v in data['lastStarport'].get('modules', {}).itervalues():
-        try:
-            module = outfitting.lookup(v, ship_map)
-            if module:
-                modules.append({ k: module[k] for k in schemakeys if k in module })	# just the relevant keys
-        except AssertionError as e:
-            if __debug__: print 'Outfitting: %s' % e	# Silently skip unrecognized modules
-        except:
-            if __debug__: raise
+    # Don't send empty modules list
+    if data['lastStarport'].get('modules'):
+        schemakeys = ['category', 'name', 'mount', 'guidance', 'ship', 'class', 'rating']
+        modules = []
+        for v in data['lastStarport'].get('modules', {}).itervalues():
+            try:
+                module = outfitting.lookup(v, ship_map)
+                if module:
+                    modules.append({ k: module[k] for k in schemakeys if k in module })	# just the relevant keys
+            except AssertionError as e:
+                if __debug__: print 'Outfitting: %s' % e	# Silently skip unrecognized modules
+            except:
+                if __debug__: raise
 
-    send(data['commander']['name'], {
-        '$schemaRef' : 'http://schemas.elite-markets.net/eddn/outfitting/1',
-        'message'    : {
-            'systemName'  : data['lastSystem']['name'].strip(),
-            'stationName' : data['lastStarport']['name'].strip(),
-            'modules'     : modules,
-        }
-    })
+        send(data['commander']['name'], {
+            '$schemaRef' : 'http://schemas.elite-markets.net/eddn/outfitting/1',
+            'message'    : {
+                'systemName'  : data['lastSystem']['name'].strip(),
+                'stationName' : data['lastStarport']['name'].strip(),
+                'modules'     : modules,
+            }
+        })
 
 def export_shipyard(data):
     # Don't send empty ships list - shipyard data is only guaranteed present if user has visited the shipyard.