Index: src/simutrans/simmain.cc
===================================================================
--- src/simutrans/simmain.cc	(revision 10647)
+++ src/simutrans/simmain.cc	(working copy)
@@ -99,7 +99,7 @@
 using std::string;
 
 
-#ifdef DEBUG
+//#ifdef DEBUG
 /* diagnostic routine:
  * show the size of several internal structures
  */
@@ -108,38 +108,38 @@
 	log_t::level_t old_level = env_t::verbose_debug;
 	env_t::verbose_debug = log_t::LEVEL_MSG;
 
-	DBG_MESSAGE("Debug", "size of structures");
-	DBG_MESSAGE("sizes", "size of pointer %i", sizeof(void*));
+	dbg->message("Debug", "size of structures");
+	dbg->message("sizes", "size of pointer %i", sizeof(void*));
 
-	DBG_MESSAGE("sizes", "koord: %d", sizeof(koord));
-	DBG_MESSAGE("sizes", "koord3d: %d", sizeof(koord3d));
-	DBG_MESSAGE("sizes", "ribi_t::ribi: %d", sizeof(ribi_t::ribi));
-	DBG_MESSAGE("sizes", "halthandle_t: %d\n", sizeof(halthandle_t));
+	dbg->message("sizes", "koord: %d", sizeof(koord));
+	dbg->message("sizes", "koord3d: %d", sizeof(koord3d));
+	dbg->message("sizes", "ribi_t::ribi: %d", sizeof(ribi_t::ribi));
+	dbg->message("sizes", "halthandle_t: %d\n", sizeof(halthandle_t));
 
-	DBG_MESSAGE("sizes", "obj_t: %d", sizeof(obj_t));
-	DBG_MESSAGE("sizes", "gebaeude_t: %d", sizeof(gebaeude_t));
-	DBG_MESSAGE("sizes", "baum_t: %d", sizeof(baum_t));
-	DBG_MESSAGE("sizes", "wolke_t: %d", sizeof(wolke_t));
-	DBG_MESSAGE("sizes", "weg_t: %d", sizeof(weg_t));
-	DBG_MESSAGE("sizes", "private_car_t: %d\n", sizeof(private_car_t));
+	dbg->message("sizes", "obj_t: %d", sizeof(obj_t));
+	dbg->message("sizes", "gebaeude_t: %d", sizeof(gebaeude_t));
+	dbg->message("sizes", "baum_t: %d", sizeof(baum_t));
+	dbg->message("sizes", "wolke_t: %d", sizeof(wolke_t));
+	dbg->message("sizes", "weg_t: %d", sizeof(weg_t));
+	dbg->message("sizes", "private_car_t: %d\n", sizeof(private_car_t));
 
-	DBG_MESSAGE("sizes", "grund_t: %d", sizeof(grund_t));
-	DBG_MESSAGE("sizes", "boden_t: %d", sizeof(boden_t));
-	DBG_MESSAGE("sizes", "wasser_t: %d", sizeof(wasser_t));
-	DBG_MESSAGE("sizes", "planquadrat_t: %d\n", sizeof(planquadrat_t));
+	dbg->message("sizes", "grund_t: %d", sizeof(grund_t));
+	dbg->message("sizes", "boden_t: %d", sizeof(boden_t));
+	dbg->message("sizes", "wasser_t: %d", sizeof(wasser_t));
+	dbg->message("sizes", "planquadrat_t: %d\n", sizeof(planquadrat_t));
 
-	DBG_MESSAGE("sizes", "ware_t: %d", sizeof(ware_t));
-	DBG_MESSAGE("sizes", "vehicle_t: %d", sizeof(vehicle_t));
-	DBG_MESSAGE("sizes", "haltestelle_t: %d\n", sizeof(haltestelle_t));
+	dbg->message("sizes", "ware_t: %d", sizeof(ware_t));
+	dbg->message("sizes", "vehicle_t: %d", sizeof(vehicle_t));
+	dbg->message("sizes", "haltestelle_t: %d\n", sizeof(haltestelle_t));
 
-	DBG_MESSAGE("sizes", "karte_t: %d", sizeof(karte_t));
-	DBG_MESSAGE("sizes", "player_t: %d\n", sizeof(player_t));
+	dbg->message("sizes", "karte_t: %d", sizeof(karte_t));
+	dbg->message("sizes", "player_t: %d\n", sizeof(player_t));
 	env_t::verbose_debug = old_level;
 }
-#endif
+//#endif
 
 
-#if defined DEBUG || defined PROFILE
+//#if defined DEBUG || defined PROFILE
 // render tests ...
 static void show_times(karte_t *welt, main_view_t *view)
 {
@@ -221,7 +221,7 @@
 	}
 	dbg->message( "welt->sync_step(200)/display(200)/step", "%i iterations took %li ms", i, dr_time() - ms );
 }
-#endif
+//#endif
 
 
 // some routines for the modal display
@@ -865,12 +865,12 @@
 	DBG_MESSAGE("simu_main()", "user_dir:    %s", env_t::user_dir);
 	DBG_MESSAGE("simu_main()", "locale:      %s", dr_get_locale_string());
 
-#ifdef DEBUG
+//#ifdef DEBUG
 	if (args.has_arg("-sizes")) {
 		// show the size of some structures ...
 		show_sizes();
 	}
-#endif
+//#endif
 
 	static const sint16 resolutions[][2] = {
 		{  640,  480 },
@@ -1499,7 +1499,8 @@
 	dr_chdir(env_t::user_dir);
 
 	// reset random counter to true randomness
-	setsimrand(dr_time(), dr_time());
+//	setsimrand(dr_time(), dr_time());
+	setsimrand(0,0);
 	clear_random_mode( 7 ); // allow all
 
 	scenario_t *scen = NULL;
@@ -1584,12 +1585,12 @@
 
 	uint32 quit_month = 0x7FFFFFFFu;
 
-#if defined DEBUG || defined PROFILE
+//#if defined DEBUG || defined PROFILE
 	// do a render test?
 	if (args.has_arg("-times")) {
 		show_times(welt, view);
 	}
-#endif
+//#endif
 
 	// finish after a certain month? (must be entered decimal, i.e. 12*year+month
 	if(  args.has_arg("-until")  ) {
@@ -1685,7 +1686,8 @@
 		welt->get_message()->get_message_flags(&env_t::message_flags[0], &env_t::message_flags[1], &env_t::message_flags[2], &env_t::message_flags[3]);
 		welt->set_fast_forward(false);
 		welt->set_pause(false);
-		setsimrand(dr_time(), dr_time());
+//		setsimrand(dr_time(), dr_time());
+		setsimrand(0,0);
 
 		dbg->message("simu_main()", "World finished ..." );
 	}
Index: src/simutrans/world/simworld.cc
===================================================================
--- src/simutrans/world/simworld.cc	(revision 10647)
+++ src/simutrans/world/simworld.cc	(working copy)
@@ -527,6 +527,8 @@
 
 	DBG_MESSAGE("karte_t::destroy()", "world destroyed");
 	destroying = false;
+
+	fflush(NULL);
 }
 
 
@@ -2638,8 +2640,28 @@
  */
 void karte_t::sync_step(uint32 delta_t)
 {
+static unsigned long tickss=0;
+static unsigned long next_tickss=0;
+static unsigned long syncss=0;
+static sint64 buildings_cum=0;
+static sint64 clouds_cum=0;
+static sint64 convois_cum=0;
+static sint64 private_cars_cum=0;
+static sint64 pedestrians_cum=0;
+static sint64 movingobjs_cum=0;
+static sint64 roadsigns_cum=0;
+static sint64 senkes_cum=0;
+static sint64 total_cum=0;
+LARGE_INTEGER li1, li2, li3;
+
 	set_random_mode( SYNC_STEP_RANDOM );
 
+
+tickss+=delta_t;
+next_tickss+=delta_t;
+syncss++;
+QueryPerformanceCounter(&li1);
+
 	// only omitted, when called to display a new frame during fast forward
 
 	// just for progress
@@ -2655,7 +2677,12 @@
 	 * foundations etc are added removed frequently during city growth
 	 */
 	sync_buildings.sync_step( delta_t );
+QueryPerformanceCounter(&li2);
+buildings_cum += (li2.QuadPart-li1.QuadPart);
+
 	wolke_t::sync_handler(delta_t);
+QueryPerformanceCounter(&li3);
+clouds_cum += (li3.QuadPart-li2.QuadPart);
 
 	clear_random_mode( INTERACTIVE_RANDOM );
 
@@ -2662,13 +2689,51 @@
 	// the following sync_steps affect the game state
 
 	sync_roadsigns.sync_step(delta_t);
+QueryPerformanceCounter(&li2);
+roadsigns_cum += (li2.QuadPart-li3.QuadPart);
+
 	pedestrian_t::sync_handler(delta_t);
+QueryPerformanceCounter(&li3);
+pedestrians_cum += (li3.QuadPart-li2.QuadPart);
+
 	movingobj_t::sync_handler(delta_t);
+QueryPerformanceCounter(&li2);
+movingobjs_cum += (li2.QuadPart-li3.QuadPart);
+
 	private_car_t::sync_handler(delta_t);
+QueryPerformanceCounter(&li3);
+private_cars_cum += (li3.QuadPart-li2.QuadPart);
+
 	senke_t::sync_handler(delta_t);
+QueryPerformanceCounter(&li2);
+senkes_cum += (li2.QuadPart-li3.QuadPart);
 
 	sync.sync_step( delta_t );
+QueryPerformanceCounter(&li3);
+convois_cum += (li3.QuadPart-li2.QuadPart);
 
+total_cum += (li3.QuadPart-li1.QuadPart);
+
+
+if(next_tickss>10000) {
+	next_tickss-=10000;
+	QueryPerformanceFrequency(&li1);
+	const double freqscale = li1.QuadPart/1000.0;
+if(tickss<20000) printf("%f\n", freqscale);
+
+	printf("cum: %lu, %lu, %.1f, %.1f, %.1f, %.1f, %.1f, %.1f, %.1f, %.1f, %.1f", tickss, syncss,
+		(double)buildings_cum/freqscale, (double)clouds_cum/freqscale, (double)convois_cum/freqscale, (double)private_cars_cum/freqscale, (double)pedestrians_cum/freqscale, (double)movingobjs_cum/freqscale, (double)roadsigns_cum/freqscale
+		, (double)senkes_cum/freqscale, (double)total_cum/freqscale );
+
+	printf("       %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f",
+		(double)buildings_cum/freqscale/syncss, (double)clouds_cum/freqscale/syncss, (double)convois_cum/freqscale/syncss, (double)private_cars_cum/freqscale/syncss, (double)pedestrians_cum/freqscale/syncss, (double)movingobjs_cum/freqscale/syncss, (double)roadsigns_cum/freqscale/syncss
+		, (double)senkes_cum/freqscale/syncss, (double)total_cum/freqscale/syncss );
+
+
+	printf("\n");
+}
+
+
 	ticker::update();
 
 	clear_random_mode( SYNC_STEP_RANDOM );
