diff --git a/src/infrastructure_func.h b/src/infrastructure_func.h
index e4f6f70..765294d 100644
--- a/src/infrastructure_func.h
+++ b/src/infrastructure_func.h
@@ -76,6 +76,21 @@ static FORCEINLINE bool CheckInfraUsageAllowed(Owner infra_owner, VehicleType ty
 }
 
 /**
+ * Is a a vehicle owned by _current_company allowed to use any of the facilities of the station owned by infra_owner?
+ */
+static FORCEINLINE bool CheckStationUsageAllowed(Owner infra_owner, StationFacilityByte facilities)
+{
+    return (
+            !Company::IsValidID(infra_owner)
+        ||  (facilities & FACIL_TRAIN) && CheckInfraUsageAllowed(infra_owner, VEH_TRAIN)
+        ||  (facilities & (FACIL_TRUCK_STOP | FACIL_BUS_STOP)) && CheckInfraUsageAllowed(infra_owner, VEH_ROAD)
+        ||  (facilities & FACIL_AIRPORT) && CheckInfraUsageAllowed(infra_owner, VEH_AIRCRAFT)
+        ||  (facilities & FACIL_DOCK) && CheckInfraUsageAllowed(infra_owner, VEH_SHIP)
+        /*  (facilities & FACIL_WAYPOINT) && ??? */
+    );
+}
+
+/**
  * Check whether a given company can control this vehicle.
  * Controlling a vehicle means permission to start, stop or reverse it or to make it ignore signals.
  * @param v The vehicle which may or may not be controlled.
diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp
index add24d9..ab28bbf 100644
--- a/src/smallmap_gui.cpp
+++ b/src/smallmap_gui.cpp
@@ -31,6 +31,7 @@
 #include "company_func.h"
 #include "station_base.h"
 #include "zoom_func.h"
+#include "infrastructure_func.h"
 
 #include "table/strings.h"
 #include "table/sprites.h"
@@ -890,7 +891,7 @@ class SmallMapWindow : public Window {
 
 		const Station *st;
 		FOR_ALL_STATIONS(st) {
-			if (st->owner != _local_company && Company::IsValidID(st->owner)) continue;
+			if (!CheckStationUsageAllowed(st->owner, st->facilities)) continue;
 
 			Point pt = GetStationMiddle(st);
 
@@ -1001,7 +1002,7 @@ class SmallMapWindow : public Window {
 
 			const Station * sta;
 			FOR_ALL_STATIONS(sta) {
-				if (sta->owner != _local_company && Company::IsValidID(sta->owner)) continue;
+				if (!CheckStationUsageAllowed(sta->owner, sta->facilities)) continue;
 				for (int i = 0; i < _smallmap_cargo_count; ++i) {
 					const LegendAndColour &tbl = _legend_table[window->map_type][i];
 					if (!tbl.show_on_map) continue;
@@ -1014,7 +1015,7 @@ class SmallMapWindow : public Window {
 						if (Station::IsValidID(to) && seen_stations.find(to) == seen_stations.end()) {
 							const Station *stb = Station::Get(to);
 
-							if (stb->owner != _local_company && Company::IsValidID(stb->owner)) continue;
+							if (!CheckStationUsageAllowed(stb->owner, stb->facilities)) continue;
 							if (seen_links.find(std::make_pair(to, from)) != seen_links.end()) continue;
 
 							DrawForwBackLinks(sta->index, stb->index);
