public static function &GetChildCategories($iParentId = null, $aFilter = null, $sLanguageID = null)
    {
        $sActiveSnippetRestriction = TdbShopCategoryList::GetActiveCategoryQueryRestriction();
        if (is_null($iParentId)) {
            $iParentId = '';
        }
        $parameters = array(
            'parentId' => $iParentId,
        );
        $parameterType = array();

        $query = 'SELECT `shop_category`.*
                  FROM `shop_category`
                 WHERE `shop_category`.`shop_category_id` = :parentId
               ';

        if (!is_null($aFilter) && count($aFilter) > 0) {
            $parameters['filter'] = $aFilter;
            $parameterType['filter'] = Connection::PARAM_STR_ARRAY;
            $query .= ' AND `shop_category`.`id` IN (:filter) ';
        }
        if (!empty($sActiveSnippetRestriction)) {
            $query .= ' AND '.$sActiveSnippetRestriction;
        }
        $query .= ' ORDER BY `shop_category`.`position` ASC, `shop_category`.`name` ASC';

        $oCategories = new TdbShopCategoryList();
        $oCategories->SetLanguage($sLanguageID);
        $oCategories->Load($query, $parameters, $parameterType);

        return $oCategories;
    }