diff --git a/include/class.ticket.php b/include/class.ticket.php
index cfc167ae9e9311783649cea00304b9c8d39fa259..a2cee6153ae00ba9efb04c91562f00804fb235b9 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -2980,7 +2980,7 @@ implements RestrictedAccess, Threadable {
                 }
 
                 $user_form = UserForm::getUserForm()->getForm($vars);
-                $can_create = $thisstaff->getRole()->hasPerm(User::PERM_CREATE);
+                $can_create = !$thisstaff || $thisstaff->getRole()->hasPerm(User::PERM_CREATE);
                 if (!$user_form->isValid($field_filter('user'))
                     || !($user=User::fromVars($user_form->getClean(), $can_create))
                 ) {
diff --git a/include/client/open.inc.php b/include/client/open.inc.php
index e04c9f6eefcb4e165aa9918e602503281f5c3fcd..30013531f1b897f3e5880b24f2235429a544b678 100644
--- a/include/client/open.inc.php
+++ b/include/client/open.inc.php
@@ -16,6 +16,8 @@ if (!$info['topicId'])
 $forms = array();
 if ($info['topicId'] && ($topic=Topic::lookup($info['topicId']))) {
     foreach ($topic->getForms() as $F) {
+        if (!$F->hasAnyVisibleFields())
+            continue;
         if ($_POST) {
             $F = $F->instanciate();
             $F->isValidForClient();
@@ -82,8 +84,6 @@ if ($info['topicId'] && ($topic=Topic::lookup($info['topicId']))) {
     </tbody>
     <tbody id="dynamic-form">
         <?php foreach ($forms as $form) {
-            if (!$form->hasAnyVisibleFields())
-                continue;
             include(CLIENTINC_DIR . 'templates/dynamic-form.tmpl.php');
         } ?>
     </tbody>
diff --git a/include/staff/ticket-open.inc.php b/include/staff/ticket-open.inc.php
index a6fe4c26cce9173c1c1d30eaaa954e79de4a99e4..80f4829e20f950bd81d30f13d5053e7ad0214cfb 100644
--- a/include/staff/ticket-open.inc.php
+++ b/include/staff/ticket-open.inc.php
@@ -12,6 +12,8 @@ if (!$info['topicId'])
 $forms = array();
 if ($info['topicId'] && ($topic=Topic::lookup($info['topicId']))) {
     foreach ($topic->getForms() as $F) {
+        if (!$F->hasAnyVisibleFields())
+            continue;
         if ($_POST) {
             $F = $F->instanciate();
             $F->isValidForClient();
@@ -266,8 +268,6 @@ if ($_POST)
         <tbody id="dynamic-form">
         <?php
             foreach ($forms as $form) {
-                if (!$form->hasAnyVisibleFields())
-                    continue;
                 print $form->getForm()->getMedia();
                 include(STAFFINC_DIR .  'templates/dynamic-form.tmpl.php');
             }