diff --git a/src/landscape.cpp b/src/landscape.cpp
index 1672e2f60a..4804ea2156 100644
--- a/src/landscape.cpp
+++ b/src/landscape.cpp
@@ -952,7 +952,6 @@ void GenerateLandscape(byte mode)
 	if (_settings_game.game_creation.landscape == LT_TROPIC) CreateDesertOrRainForest();
 }
 
-void OnTick_Objects();
 void OnTick_Town();
 void OnTick_Trees();
 void OnTick_Station();
@@ -967,6 +966,5 @@ void CallLandscapeTick()
 	OnTick_Station();
 	OnTick_Industry();
 
-	OnTick_Objects();
 	OnTick_Companies();
 }
diff --git a/src/newgrf_animation_type.h b/src/newgrf_animation_type.h
index feb2bdfd85..660cec9904 100644
--- a/src/newgrf_animation_type.h
+++ b/src/newgrf_animation_type.h
@@ -57,7 +57,7 @@ enum AirpAnimationTrigger {
 enum ObjectAnimationTrigger {
 	OAT_BUILT,     ///< Triggered when the object is built (for all tiles at the same time).
 	OAT_TILELOOP,  ///< Triggered in the periodic tile loop.
-	OAT_250_TICKS, ///< Triggered every 250 ticks (for all tiles at the same time).
+	OAT_256_TICKS, ///< Triggered every 256 ticks (for all tiles at the same time).
 };
 
 #endif /* NEWGRF_ANIMATION_TYPE_H */
diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp
index dbfc6fda7f..f10ed4f401 100644
--- a/src/object_cmd.cpp
+++ b/src/object_cmd.cpp
@@ -439,7 +439,11 @@ static void GetTileDesc_Object(TileIndex tile, TileDesc *td)
 static void TileLoop_Object(TileIndex tile)
 {
 	const ObjectSpec *spec = ObjectSpec::GetByTile(tile);
-	if (spec->flags & OBJECT_FLAG_ANIMATION) TriggerObjectTileAnimation(Object::GetByTile(tile), tile, OAT_TILELOOP, spec);
+	if (spec->flags & OBJECT_FLAG_ANIMATION) {
+		const Object *o = Object::GetByTile(tile);
+		TriggerObjectTileAnimation(o, tile, OAT_TILELOOP, spec);
+		if (o->location.tile == tile) TriggerObjectAnimation(o, OAT_256_TICKS, spec);
+	}
 
 	if (IsTileOnWater(tile)) TileLoop_Water(tile);
 
@@ -491,21 +495,6 @@ static void AnimateTile_Object(TileIndex tile)
 	AnimateNewObjectTile(tile);
 }
 
-/** Call the ticks on the objects. */
-void OnTick_Objects()
-{
-	const Object *o;
-	FOR_ALL_OBJECTS(o) {
-		/* Run 250 tick interval trigger for object animation.
-		 * Object index is included so that triggers are not all done
-		 * at the same time. */
-		if ((_tick_counter + o->index) % 250 == 0) {
-			const ObjectSpec *spec = ObjectSpec::GetByTile(o->location.tile);
-			if (spec->flags & OBJECT_FLAG_ANIMATION) TriggerObjectAnimation(o, OAT_250_TICKS, spec);
-		}
-	}
-}
-
 /* checks, if a radio tower is within a 9x9 tile square around tile */
 static bool IsRadioTowerNearby(TileIndex tile)
 {