function groups()
    {
        if ( isset( self::$injectedSettings[$this->FileName] ) || isset( self::$injectedMergeSettings[$this->FileName] ) )
        {
            $result = $this->BlockValues;
            foreach ( $result as $blockName => $vars )
            {
                foreach ( $vars as $varName => $varValue )
                {
                    if ( isset( self::$injectedSettings[$this->FileName][$blockName][$varName] ) )
                    {
                        $result[$blockName][$varName] = self::$injectedSettings[$this->FileName][$blockName][$varName];
                    }
                    if ( isset( self::$injectedMergeSettings[$this->FileName][$blockName][$varName] ) )
                    {
                        if ( !is_array( $result[$blockName][$varName] ) || !is_array( self::$injectedMergeSettings[$this->FileName][$blockName][$varName] ) )
                        {
                            throw new RuntimeException( "injected-merge-settings can only reference and contain array values" );
                        }

                        $result[$blockName][$varName] = array_merge(
                            $varValue,
                            self::$injectedMergeSettings[$this->FileName][$blockName][$varName]
                        );
                    }
                }
            }
            foreach ( self::$injectedSettings[$this->FileName] as $blockName => $vars )
            {
                if ( !isset( $result[$blockName] ) )
                {
                    $result[$blockName] = $vars;
                }
            }
            return $result;
        }
        return $this->BlockValues;
    }