In J4 it is possible to override models and the rest of MVC classes. To do that, you need a system plugin to register a custom MVC factory during `onAfterExtensionBoot` or `onBeforeExtensionBoot` event. use Joomla\CMS\Extension\ComponentInterface; use Joomla\CMS\MVC\Factory\MVCFactory; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Component\Content\Administrator\Model\ArticlesModel; use Joomla\DI\Container; use Joomla\Event\EventInterface; final class PlgSystemOverride extends CMSPlugin { public function onAfterExtensionBoot(EventInterface $event) { // Test that a component is being booted. if ($event->getArgument('type') !== ComponentInterface::class) { return; } // Test that this is com_content component. if ($event->getArgument('extensionName') !== 'content') { return; } // Get the service container. $container = $event->getArgument('container'); if (!($container instanceof Container)) { return; } // Check that MVC factory is used and can be overridden. if (!$container->has(MVCFactoryInterface::class) || $container->isProtected(MVCFactoryInterface::class)) { return; } // Register the custom MVC factory. Here an anonymous class is used but you can use a concrete class. $container->set( MVCFactoryInterface::class, static fn () => new class ('Joomla\\Component\\Content') extends MVCFactory { protected function getClassName(string $suffix, string $prefix) { $class = parent::getClassName($suffix, $prefix); // Override the backend article list model with a custom class. if ($class === ArticlesModel::class) { return 'MyCustomArticlesModel'; } return $class; } } ); } } Then in your custom class extend the original class and add the overridden `populateState()` method. Additionally, depending on class name, you might need to declare `$context` and `$filterFormName` properties. This is because they're derived from class name when not set explicitly. use Joomla\Component\Content\Administrator\Model\ArticlesModel; class MyCustomArticlesModel extends ArticlesModel { protected $context = 'com_content.articles'; protected $filterFormName = 'filter_articles'; protected function populateState($ordering = 'a.modified', $direction = 'DESC') { parent::populateState($ordering, $direction); } } Alternatively to all of this, you can also change the default ordering by setting the appropriate session key, also using a system plugin: use Joomla\CMS\Plugin\CMSPlugin; final class PlgSystemOverride extends CMSPlugin { protected $app; public function onAfterRoute() { // Only run for logged in users in com_content backend. if (!$this->app->isClient('administrator') || $this->app->getInput()->get('option') !== 'com_content' || $this->app->getIdentity()->guest) { return; } // Session key to use. $key = 'com_content.articles.list.fullordering'; // Set it only if it hasn't been set yet. if (!$this->app->getUserState($key)) { $this->app->setUserState($key, 'a.modified DESC'); } } }