diff --git a/src/base.tab b/src/base.tab
index ad119e3c1..d9674c08c 100644
--- a/src/base.tab
+++ b/src/base.tab
@@ -2898,6 +2898,10 @@ name=Usage: %.0f %%
 note=powernet info window
 -
 obj=program_text
+name=No transformer connected
+note=factory electricity tab, shown when the plant feeds no network
+-
+obj=program_text
 name=Supplied: %.0f %%
 note=powernet info window
 -
diff --git a/src/simutrans/simfab.cc b/src/simutrans/simfab.cc
index 5a17c80ae..b9efc8f19 100644
--- a/src/simutrans/simfab.cc
+++ b/src/simutrans/simfab.cc
@@ -750,6 +750,7 @@ fabrik_t::fabrik_t(loadsave_t* file)
 	owner = NULL;
 	prodfactor_electric = 0;
 	consumer_active_last_month = 0;
+	computed_power_supply = 0;
 	pos = koord3d::invalid;
 	transformers.clear();
 
@@ -807,6 +808,7 @@ fabrik_t::fabrik_t(koord3d pos_, player_t* owner, const factory_desc_t* factory_
 	total_input = total_transit = total_output = 0;
 	status = STATUS_NOTHING;
 	consumer_active_last_month = 0;
+	computed_power_supply = 0;
 
 	// create input information
 	input.resize( factory_desc->get_supplier_count() );
@@ -1651,6 +1653,8 @@ uint32 fabrik_t::scale_output_production(const uint32 product, uint32 menge) con
 
 void fabrik_t::set_power_supply(uint32 supply)
 {
+	computed_power_supply = supply;
+
 	if( transformers.empty() ) {
 		return;
 	}
@@ -1950,6 +1954,10 @@ void fabrik_t::step(uint32 delta_t)
 		// The amount of consumption available.
 		sint32 cons_comp = 0;
 
+		// Branches that stop early because nothing can be produced never reach a
+		// set_power_supply() call, so clear it here rather than keep a stale figure.
+		computed_power_supply = 0;
+
 		switch(  control_type  ) {
 			case CL_PROD_CLASSIC: {
 				// Classic producer logic.
@@ -3080,8 +3088,10 @@ void fabrik_t::info_power(cbuffer_t& buf) const
 		buf.printf(translator::translate("Net ID: %p"), net);
 		buf.append("\n");
 	}
-	// capacity offered to the net now, already scaled by production level and boost
-	buf.printf(translator::translate("Generation: %.0f MW"), (double)(get_power_supply() >> POWER_TO_MW));
+	// what this plant is producing now, already scaled by production level and boost.
+	// Not get_power_supply(): that reads the transformer, so it collapses to 0 when
+	// the plant is disconnected even though the figure was computed.
+	buf.printf(translator::translate("Generation: %.0f MW"), (double)(get_computed_power_supply() >> POWER_TO_MW));
 	buf.append("\n");
 	// what the net actually draws from this plant: supply * normalised demand,
 	// the same figure the "Power (MW)" curve records every month
@@ -3090,6 +3100,12 @@ void fabrik_t::info_power(cbuffer_t& buf) const
 		buf.append("\n");
 		buf.printf(translator::translate("Usage: %.0f %%"), (double)((100 * net->get_normal_demand()) >> powernet_t::FRACTION_PRECISION));
 	}
+	else if(  trans == NULL  ) {
+		// otherwise Generation and a zero Power read as a contradiction: say why
+		// nothing is being drawn instead of leaving it to be inferred.
+		buf.append("\n");
+		buf.append(translator::translate("No transformer connected"));
+	}
 }
 
 
diff --git a/src/simutrans/simfab.h b/src/simutrans/simfab.h
index 023936a0a..d13b059ab 100644
--- a/src/simutrans/simfab.h
+++ b/src/simutrans/simfab.h
@@ -358,6 +358,12 @@ private:
 	 */
 	uint32 scaled_electric_demand;
 
+	/**
+	 * Supply computed by the production logic this step, kept whether or not a
+	 * transformer exists to offer it to a net. Display only, never serialised.
+	 */
+	uint32 computed_power_supply;
+
 	/**
 	 * Pax/mail demand scaled with prodbase and month length
 	 */
@@ -714,6 +720,13 @@ public:
 	uint32 get_scaled_pax_demand() const { return scaled_pax_demand; }
 	uint32 get_scaled_mail_demand() const { return scaled_mail_demand; }
 
+	/**
+	 * Supply this factory computed on its last step. Unlike get_power_supply()
+	 * this does not require a transformer, so a disconnected plant still reports
+	 * what it is producing.
+	 */
+	uint32 get_computed_power_supply() const { return computed_power_supply; }
+
 	bool is_end_consumer() const { return (output.empty() && !desc->is_electricity_producer()); }
 
 	// Returns a list of goods produced by this factory.
