diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index 2da492069c3bd8aae2b02ca61afef2c9e2dee0e1..b01871b5681109d589180e25b573afe03b55dde4 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -580,17 +580,26 @@ class DynamicFormEntry extends VerySimpleModel {
      * $filter - (callback) function to receive each field and return
      *      boolean true if the field's errors are significant
      */
-    function isValid($include=false) {
+    function isValid($filter=false) {
         if (!is_array($this->_errors)) {
             $this->_errors = array();
             $this->getClean();
             foreach ($this->getFields() as $field)
-                if ($field->errors() && (!$include || $include($field)))
+                if ($field->errors() && (!$filter || $filter($field)))
                     $this->_errors[$field->get('id')] = $field->errors();
         }
         return !$this->_errors;
     }
 
+    function isValidForClient() {
+
+        $filter = function($f) {
+            return !$f->get('private');
+        };
+
+        return $this->isValid($filter);
+    }
+
     function getClean() {
         if (!$this->_clean) {
             $this->_clean = array();
diff --git a/include/class.ticket.php b/include/class.ticket.php
index e70b25dec2e8b760cb7eb1530d2d3c407a2c6bc6..d46734e7d19de60c56386fb00cf0875a985353d0 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -2294,7 +2294,7 @@ class Ticket {
         }
 
         if ($vars['topicId'] && ($topic=Topic::lookup($vars['topicId']))) {
-            if ($topic_form = DynamicForm::lookup($topic->ht['form_id'])) {
+            if ($topic_form = $topic->getForm()) {
                 $topic_form = $topic_form->instanciate();
                 if (!$topic_form->getForm()->isValid($field_filter('topic')))
                     $errors = array_merge($errors, $topic_form->getForm()->errors());
diff --git a/include/client/open.inc.php b/include/client/open.inc.php
index 26d146f22cd250589622ecea45d612847ecc239d..dc481b3b9ee25b0e61d777308a7b86a2d84384b2 100644
--- a/include/client/open.inc.php
+++ b/include/client/open.inc.php
@@ -8,6 +8,16 @@ if($thisclient && $thisclient->isValid()) {
 }
 
 $info=($_POST && $errors)?Format::htmlchars($_POST):$info;
+
+$form = null;
+if ($info['topicId'] && ($topic=Topic::lookup($info['topicId']))) {
+    $form = $topic->getForm();
+    if ($_POST && $form) {
+        $form = $form->instanciate();
+        $form->isValidForClient();
+    }
+}
+
 ?>
 <h1>Open a New Ticket</h1>
 <p>Please fill in the form below to open a new ticket.</p>
diff --git a/include/staff/ticket-open.inc.php b/include/staff/ticket-open.inc.php
index b472f46764306fbe7cac85779f62c485b858e75e..dbf2180e3c7494cc9bb38d537cc7fa115e826c35 100644
--- a/include/staff/ticket-open.inc.php
+++ b/include/staff/ticket-open.inc.php
@@ -2,6 +2,16 @@
 if(!defined('OSTSCPINC') || !$thisstaff || !$thisstaff->canCreateTickets()) die('Access Denied');
 $info=array();
 $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
+
+$form = null;
+if ($info['topicId'] && ($topic=Topic::lookup($info['topicId']))) {
+    $form = $topic->getForm();
+    if ($_POST && $form) {
+        $form = $form->instanciate();
+        $form->isValid();
+    }
+}
+
 ?>
 <form action="tickets.php?a=open" method="post" id="save"  enctype="multipart/form-data">
  <?php csrf_token(); ?>
@@ -130,8 +140,8 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
                                 $selected, $name);
                         }
                         if (count($topics) == 1 && !$form) {
-                            $T = Topic::lookup($id);
-                            $form = DynamicForm::lookup($T->ht['form_id']);
+                            if (($T = Topic::lookup($id)))
+                                $form =  $T->getForm();
                         }
                     }
                     ?>
@@ -233,7 +243,9 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
         </tbody>
         <tbody id="dynamic-form">
         <?php
-            if ($form) $form->getForm()->render(true);
+            if ($form) {
+                include(STAFFINC_DIR .  'templates/dynamic-form.tmpl.php');
+            }
         ?>
         </tbody>
         <tbody> <?php