In funktion SetCatArticleCount in oxutils, the shopID is being dropped so all articles are counted that is assigned in all shops. This is the solution: select count( * ) from oxobject2category WHERE oxobject2category.oxcatnid = '".$sCatId."' and oxobject2category.oxshopid = '".$myConfig->getShopId()."' and oxobject2category.oxobjectid in ... (line 3 is new). The problem of missing shopIDs has been found at different places as well. Same thing in LoadCategoryArticles() of the class oxarticlelist: $sSelect = "select $sArticleTable.* from $sArticleTable, $sO2CView as oxobject2category ".$sFilterSQLAdd; $sSelect .= "where oxobject2category.oxcatnid = '$sCatNID' "; $sSelect .= "and oxobject2category.oxshopid = '".$myConfig->getShopId()."' "; (last line is new). The select is executed in method selectString() of the class oxList and this one runs all selected articles and builds the list because of the OXID of the article: $this->aList[$object->sOXID] = $object; An object with the same OXID this way overwrites the one before in the array. This is where we could save some performance ;-) Same thing in admin. The categories come up 5 times in "Manage Articles" -> "extended"(one time each per shop) Solution: In admin/article_extend in method render(): // hightlighting main category $sMainSelect = "select $sCatView.oxid from $sO2CView left join $sCatView on $sCatView.oxid=$sO2CView.oxcatnid "; $sMainSelect .= 'where '.$sO2CView .'.oxobjectid = "'.$soxId.'" and '.$sCatView.'.oxid is not null '; $sMainSelect .= "and '.$sO2CView .'.oxshopid = '".$myConfig->getShopId()."' "; and in core/oxajaxlist.php, method createCategoryList(): $sSelect = "select * from $sO2CView as oxobject2category left join ".$sCategoriesTable.' on '.$sCategoriesTable.'.oxid=oxobject2category.oxcatnid '; $sSelect .= 'where oxobject2category.oxobjectid = "'.$sArtId.'" and '.$sCategoriesTable.'.oxid is not null '; $sSelect .= "and oxobject2category.oxshopid = '".$myConfig->getShopID()."' ";