Here's how to sort of fix the DST issue, at least in iCal exports.
Edit
plans_lib.pl, find the event2ical subroutine, and make the first
part of it look like this:
sub event2ical() {
my ($event_ref) = @_;
my %event = %{$event_ref};
my $results;
my $start_timestamp = $event{start} - $calendars{$event{cal_ids}[0]}
{gmtime_diff}*3600;
my $end_timestamp = $event{end} - $calendars{$event{cal_ids}[0]}
{gmtime_diff}*3600;
my @timestamp_array = localtime($event{start});
my $ndst = $timestamp_array[8];
my $dst_start_timestamp = $event{start} - ( $ndst * 3600 );
my $dst_end_timestamp = $event{end} - ( $ndst * 3600 );
my $cal_title = $calendars{$event{cal_ids}[0]}{title}; # need to
add titles for all other cal_ids
my $dtstart_string = "";
my $dtend_string = "";
my $rightnow_date = &outlook_date_time($rightnow) . 'Z';
if ($event{all_day_event} eq "1") {
$dtstart_string = ";VALUE=DATE:".&outlook_date($event{start});
$dtend_string = ";VALUE=DATE:".&outlook_date($event{end}+86400);
} else {
# $dtstart_string = ":".&outlook_date_time($event{start}) . 'Z';
# $dtend_string = ":".&outlook_date_time($event{end}) . 'Z';
$dtstart_string = ":".&outlook_date_time($dst_start_timestamp) .
'Z';
$dtend_string = ":".&outlook_date_time($dst_end_timestamp) . 'Z';
}