Is there a version that works with HTML::Template::Pro? I'm using a 
template system that loads HTML::Template::Pro if available (for the 
speed enhancements)
    

Really? Did you do benchmarks and find that your templating was bottleneck? And if so, how much of a 
gain did you get from HTML::Template::Pro? If page takes 1 sec to create on the server and your 
templating takes only 10% of your execution time (and I've never had a real page where that was the 
case, it's usually closer to 2-5%) and you increase the speed of your templating by 25x (that's the 
max claimed by H::T::P) then you've taken a full 0.096 sec off.

That little gain is just not worth it to me if you have to jump through hoops to make other things 
with with the module (like you're trying to do with H::T::Sec). Plus it doesn't support query() 
which I find extremely handy.
  
I did some performance profiling of H::T some time ago -> it turns out that there is quite a bit of speed up (somewhere between 10% and 10x, depending on the page) by re-writing part of the code located around line 2660.

hope this helps,
Mathew

patch -> replace the options{associate} conditional with this:

  # support the associate magic, searching for undefined params and
  # attempting to fill them from the associated objects.
  if (scalar(@{$options->{associate}})) {
    my @undef_params;
    foreach my $param (keys %{$self->{param_map}}) {
      next if (defined $self->param($param));
      push @undef_params, $param;
    }
    if (scalar(@undef_params)) {
      my $value;
      # if case sensitive mode or no CGI objects, we can use the fast path
      if ($options->{case_sensitive} or (grep { !/^1/ } map { UNIVERSAL::isa($_,'HTML::Template') } @{$options->{associate}}) == 0) {
        foreach my $param (@undef_params) {
          foreach my $associated_object (reverse @{$options->{associate}}) {
            $value = $associated_object->param($param);
            next unless (defined $value);
            $self->param($param, scalar $value);
            last;
          }
        }
      } else {
        my %case_map;
        foreach my $associated_object (@{$options->{associate}}) {
          map { $case_map{$associated_object}{lc($_)} = $_ } $associated_object->param();
        }
        my $associated_param;
        foreach my $param (@undef_params) {
          foreach my $associated_object (reverse @{$options->{associate}}) {
            $associated_param = $case_map{$associated_object}{$param};
            next unless (defined $associated_param);
            $value = $associated_object->param($associated_param);
            next unless (defined $value);
            $self->param($param, scalar $value);
            last;
          }
        }
      }
    }
  }