diff --git a/core/experiments/weathermonitor/campaign.cc b/core/experiments/weathermonitor/campaign.cc
index 2436bc20bcbe1aa4773d7d7c604d796711406081..9a9c050795a423dea6db629c2e67965f0c1d9988 100644
--- a/core/experiments/weathermonitor/campaign.cc
+++ b/core/experiments/weathermonitor/campaign.cc
@@ -161,14 +161,32 @@ bool WeathermonitorCampaign::run()
 		// result comparable to the non-pruned campaign.
 		// XXX still true for weathermonitor?
 		current_ec.instr2 = instr - 1;
-		current_ec.instr2_absolute = 0; // won't be used
+		current_ec.instr2_absolute = 0; // unknown
 		current_ec.data_address = data_address;
 		// zero-sized?  skip.
 		if (current_ec.instr1 > current_ec.instr2) {
 			continue;
 		}
-		// as the experiment ends, this byte is a "don't care":
-		ecs_no_effect.push_back(current_ec);
+		// the run continues after the FI window, so do this experiment
+		// XXX this creates at least one experiment for *every* bit!
+		//     fix: full trace, limited FI window
+		//ecs_no_effect.push_back(current_ec);
+		ecs_need_experiment.push_back(current_ec);
+
+		// FIXME copy/paste, encapsulate this:
+		// instantly enqueue job: that way the job clients can already
+		// start working in parallel
+		WeathermonitorExperimentData *d = new WeathermonitorExperimentData;
+		// we pick the rightmost instruction in that interval
+		d->msg.set_instr_offset(current_ec.instr2);
+		//d->msg.set_instr_address(current_ec.instr2_absolute); // unknown!
+		d->msg.set_mem_addr(current_ec.data_address);
+
+		// store index into ecs_need_experiment
+		experiment_ecs[d] = ecs_need_experiment.size() - 1;
+
+		fi::campaignmanager.addParam(d);
+		++count;
 	}
 
 	fi::campaignmanager.noMoreParameters();