Many thanks for the reply. Looks like it's reported here: https://github.com/osTicket/osTicket/issues/3247I'm not a fan of implementing the suggested fix there as I think it seems to remove a bunch of stuff. However that has led me to the code in question located in /include/client/view.inc.phpAnyone got any thoughts on what might be broken here. I've highlighted in red the piece that seems to pull in the form header text from the database. To confirm, without any custom forms the Ticket Details header is correct.<!-- Custom Data --><?php$sections = array();foreach (DynamicFormEntry:($ticket->getId()) as $i=>$form) { // Skip core fields shown earlier in the ticket view $answers = $form->getAnswers()->exclude(Q:(array( 'field__flags__hasbit' => DynamicFormField:, 'field__name__in' => array('subject', 'priority'), Q:(array('field__flags__hasbit' => DynamicFormField:)), ))); // Skip display of forms without any answers foreach ($answers as $j=>$a) { if ($v = $a->display()) $sections = array($v, $a); }}foreach ($sections as $i=>$answers) { ?> <table class="custom-data" cellspacing="0" cellpadding="4" width="100%" border="0"> <tr><td colspan="2" class="headline flush-left"><?php echo $form->getTitle(); ?></th></tr><?php foreach ($answers as $A) { list($v, $a) = $A; ?> <tr> <th><?phpecho $a->getField()->get('label'); ?>:</th> <td><?phpecho $v; ?></td> </tr><?php } ?>