'sched_label' =>
                      FS::sched_avail::pretty_time($sh*60+$sm). '-'.
                      FS::sched_avail::pretty_time($eh*60+$em). ': '.
-                     $cust_main[0]->_FreesideURILabel,
+                     encode_entities($cust_main[0]->_FreesideURILabel),
                 };
     } else {
       $return = { 'error' => $smsg };
 
 %
 %   my $bgcolor = '666666;border-color:#555555';
 %   my $content = '';
+%   my $link = '';
 %   my $selectable = 0;
 %   my $draggable_ticketid = 0;
 %   my $draggable_length = 0;
 %                   FS::sched_avail::pretty_time($due).
 %                   ': '. $cust_main[0]->_FreesideURILabel;
 %                   #'install for custname XX miles away'; #XXX placeholder/more
+%       $link = qq( <A HREF="$RT::WebPath/Ticket/Display.html?id=$id">view</A>);
 %       $draggable_ticketid = $id;
 %       $draggable_length = $due - $starts;
 %
 %       }
 %
 %     }
-    ><% $content |h %></td>
+    ><% $content |h %><% $link |n %></td>
     <SCRIPT TYPE="text/javascript">
 
       $('#<% $td_id %>').data('username', "<% $username %>");
 
 %         #remove their droppable
           $('#'+n_td_id).droppable('destroy');
           if ( d == 0 ) {
-            $('#'+n_td_id).text(label);
+            $('#'+n_td_id).html(label + ' <A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=' + ticketid + '">view</A>' );
 %           #(and make the top draggable, so we could do it all over again)
             $('#'+n_td_id).draggable({
               containment: '.titlebox-content',