diff --git a/.mutt/ical2rem.pl b/.mutt/ical2rem.pl
old mode 100644
new mode 100755
index aab07d5..ba6fb0a
--- a/.mutt/ical2rem.pl
+++ b/.mutt/ical2rem.pl
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 #
-# ical2rem.pl - 
+# ical2rem.pl -
 # Reads iCal files and outputs remind-compatible files.   Tested ONLY with
 #   calendar files created by Mozilla Calendar/Sunbird. Use at your own risk.
 # Copyright (c) 2005, 2007, Justin B. Alcorn
@@ -9,12 +9,12 @@
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -49,7 +49,7 @@
 #	- add debug code
 #	- add SCHED _sfun keyword
 #	- fix typos
-# version 0.1 - ALPHA CODE.  
+# version 0.1 - ALPHA CODE.
 
 =head1 SYNOPSIS
 
@@ -64,28 +64,28 @@
  --man				   Complete man page
 
 Expects an ICAL stream on STDIN. Converts it to the format
-used by the C<remind> script and prints it to STDOUT. 
+used by the C<remind> script and prints it to STDOUT.
 
 =head2 --label
 
   ical2rem.pl --label "Bob's Calendar"
 
 The syntax generated includes a label for the calendar parsed.
-By default this is "Calendar". You can customize this with 
+By default this is "Calendar". You can customize this with
 the "--label" option.
 
-=head2 --lead-time 
+=head2 --lead-time
 
   ical2rem.pl --lead-time 3
- 
-How may days in advance to start getting reminders about the events. Defaults to 3. 
+
+How may days in advance to start getting reminders about the events. Defaults to 3.
 
 =head2 --no-todos
 
   ical2rem.pl --no-todos
 
 If you don't care about the ToDos the calendar, this will surpress
-printing of the ToDo heading, as well as skipping ToDo processing. 
+printing of the ToDo heading, as well as skipping ToDo processing.
 
 =head2 --heading
 
@@ -94,7 +94,7 @@ printing of the ToDo heading, as well as skipping ToDo processing.
 Set an option on static messages output.  Using priorities can made the static messages look different from
 the calendar entries.  See the file defs.rem from the remind distribution for more information.
 
-=cut 
+=cut
 
 use strict;
 use iCal::Parser;
@@ -105,9 +105,9 @@ use Data::Dumper;
 use vars '$VERSION';
 $VERSION = "0.5.2";
 
-# Declare how many days in advance to remind
-my $DEFAULT_LEAD_TIME = 3;
-my $PROCESS_TODOS     = 1;
+# Declare how many minutes in advance to remind
+my $DEFAULT_LEAD_TIME = 15;
+my $PROCESS_TODOS     = undef;
 my $HEADING			  = "";
 my $help;
 my $man;
@@ -118,7 +118,7 @@ GetOptions (
 	"lead-time=i" => \$DEFAULT_LEAD_TIME,
 	"todos!"	  => \$PROCESS_TODOS,
 	"heading=s"	  => \$HEADING,
-	"help|?" 	  => \$help, 
+	"help|?" 	  => \$help,
 	"man" 	 	  => \$man
 );
 pod2usage(1) if $help;
@@ -141,7 +141,7 @@ my $hash = $parser->parse_strings(@calendars);
 
 ##############################################################
 #
-# Subroutines 
+# Subroutines
 #
 #############################################################
 #
@@ -149,15 +149,15 @@ my $hash = $parser->parse_strings(@calendars);
 # expects 'todos' hashref from iCal::Parser is input
 # returns String to output
 sub _process_todos {
-	my $todos = shift; 
-	
+	my $todos = shift;
+
 	my ($todo, @newtodos, $leadtime);
 	my $output = "";
 
 	$output .=  'REM '.$HEADING.' MSG '.$label.' ToDos:%"%"%'."\n";
 
 # For sorting, make sure everything's got something
-#   To sort on.  
+#   To sort on.
 	my $now = DateTime->now;
 	for $todo (@{$todos}) {
 		# remove completed items
@@ -178,7 +178,7 @@ sub _process_todos {
 	if (! (scalar @newtodos)) {
 		return "";
 	}
-# Now sort on the new Due dates and print them out.  
+# Now sort on the new Due dates and print them out.
 	for $todo (sort { DateTime->compare($a->{'SORT'}, $b->{'SORT'}) } @newtodos) {
 		my $due = $todo->{'SORT'}->clone();
 		my $priority = "";
@@ -212,7 +212,7 @@ sub _process_todos {
 print _process_todos($hash->{'todos'}) if $PROCESS_TODOS;
 
 my ($leadtime, $yearkey, $monkey, $daykey,$uid,%eventsbyuid);
-print 'REM '.$HEADING.' MSG '.$label.' Events:%"%"%'."\n";
+#print 'REM '.$HEADING.' MSG '.$label.' Events:%"%"%'."\n";
 my $events = $hash->{'events'};
 foreach $yearkey (sort keys %{$events} ) {
     my $yearevents = $events->{$yearkey};
@@ -221,7 +221,7 @@ foreach $yearkey (sort keys %{$events} ) {
         foreach $daykey (sort {$a <=> $b} keys %{$monevents} ) {
             my $dayevents = $monevents->{$daykey};
             foreach $uid (sort {
-                            DateTime->compare($dayevents->{$a}->{'DTSTART'}, $dayevents->{$b}->{'DTSTART'})    
+                            DateTime->compare($dayevents->{$a}->{'DTSTART'}, $dayevents->{$b}->{'DTSTART'})
                             } keys %{$dayevents}) {
                 my $event = $dayevents->{$uid};
                if ($eventsbyuid{$uid}) {
@@ -251,7 +251,8 @@ foreach $yearkey (sort keys %{$events} ) {
         foreach $daykey (sort {$a <=> $b} keys %{$monevents} ) {
             my $dayevents = $monevents->{$daykey};
             foreach $uid (sort {
-                            DateTime->compare($dayevents->{$a}->{'DTSTART'}, $dayevents->{$b}->{'DTSTART'})
+                            DateTime->compare($dayevents->{$a}->{'DTSTART'},
+                                              $dayevents->{$b}->{'DTSTART'})
                             } keys %{$dayevents}) {
                 my $event = $dayevents->{$uid};
                 if (exists($event->{'LEADTIME'})) {
@@ -260,16 +261,42 @@ foreach $yearkey (sort keys %{$events} ) {
                     $leadtime = "+".$DEFAULT_LEAD_TIME;
                 }
                 my $start = $event->{'DTSTART'};
-                print "REM ".$start->month_abbr." ".$start->day." ".$start->year." $leadtime ";
-                if ($start->hour > 0) { 
-                    print " AT ";
-                    print $start->strftime("%H:%M");
-                    print " SCHED _sfun MSG %a %2 ";
-                } else {
-                    print " MSG %a ";
+                # Tell remind that the timezone of this entry is the actual
+                # timezone from the ical, let remind work it out.
+                print "REM [trigger(tzconvert('".
+                      $start->year.'-'.$start->month.'-'.$start->day."@".
+                      $start->hour.':'.$start->minute."', \"".
+                      $start->{tz}->name().'"))] '.
+                      $leadtime.' ';
+
+                # duration
+                my $end = $event->{'DTEND'};
+                $end->set_time_zone('UTC'); #convert to UTC
+                $start->set_time_zone('UTC'); #convert to UTC
+                my $diff = $end - $start; # They're in the same timezone now.
+                print "DURATION ".
+                  join(':', $diff->in_units('hours', 'minutes'));
+
+                if ($start->hour > 0) {
+                  print " MSG %a %3 ";
                 }
+                else {
+                  print " MSG %a ";
+                }
+
                 print "%\"$event->{'SUMMARY'}";
                 print " at $event->{'LOCATION'}" if $event->{'LOCATION'};
+                print ".";
+
+
+                # build description string
+                if ($event->{'DESCRIPTION'}) {
+                  my $desc = $event->{'DESCRIPTION'};
+                  $desc=~s/\\N/ /g;
+                  $desc=~s/\[[^\]]+\]//g;
+                  $desc=~s/\\//g;
+                  print " ".$desc;
+                }
                 print "\%\"%\n";
             }
         }
