Ah, ok wasn't thinking about tag_albums but in general I agree that it makes sense to keep that functionality in the model so that it can be overridden and extended.

As for #2, you don't have to stick with using the relative_url() equivalent, because you already know what that is inside the model.  I was imagining this:

```
  /**                                                                                                                                                  
   * Return the full url to this item, eg:                                                                                                             
   *   http://example.com/gallery3/index.php/tag/35/Bob                                                                                                                     
   *                                                                                                                                                   
   * @param string $query the query string (eg "page=3")                                                                                               
   */
  public function url($query=null) {
    $url = url::abs_site("tag/{$this->id}/" . urlencode($this->name));
    if ($query) {
      $url .= "?$query";
    }
    return $url;
  }
```

tag_albums would have to override that as well.  But then you've got something simple and portable.  Yes, it does have a little bit of code duplication, but it's easy to understand.

I'm going through this at warp speed (sorry - super busy at work today) am I missing something obvious?