public static function forSource(TagSource $source, SS_List $items = null)
    {
        // Create Data List:
        
        $tags = DataList::create(static::class);
        
        // Filter Tagged Items:
        
        if ($items instanceof DataList) {
            
            if (!$items->exists()) {
                return ArrayList::create();
            }
            
            if ($belongs = Config::inst()->get(static::class, 'belongs_many_many')) {
                
                // Filter Tags Associated with Items:
                
                if ($component = array_search($items->dataClass(), $belongs)) {
                    $tags = $tags->filter(sprintf('%s.ID', $component), $items->column('ID'));
                }
                
            }
            
        }
        
        // Convert List to Array:
        
        $tags = $tags->toArray();
        
        // Associate Tags with Source:
        
        foreach ($tags as $tag) {
            $tag->setSource($source);
        }
        
        // Answer Array List:
        
        return ArrayList::create($tags);
    }