diff --git a/include/class.ticket.php b/include/class.ticket.php
index a58449fac3e6a5a43c243a15f2cdd6c9c9ac2611..b2a225194708ff9bb1b43efe72f1dd9840885679 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -145,6 +145,11 @@ class TicketModel extends VerySimpleModel {
             /* @trans */ 'Phone',
             'Email' =>
             /* @trans */ 'Email',
+
+            'Web' =>
+            /* @trans */ 'Web',
+            'API' =>
+            /* @trans */ 'API',
             'Other' =>
             /* @trans */ 'Other',
             );
@@ -2746,6 +2751,11 @@ implements RestrictedAccess, Threadable {
                 $errors['duedate']=__('Due date must be in the future');
         }
 
+        if (isset($vars['source']) // Check ticket source if provided
+                && !array_key_exists($vars['source'], Ticket::getSources()))
+            $errors['source'] = sprintf( __('Invalid source given - %s'),
+                    Format::htmlchars($vars['source']));
+
         // Validate dynamic meta-data
         $forms = DynamicFormEntry::forTicket($this->getId());
         foreach ($forms as $form) {
diff --git a/include/staff/ticket-edit.inc.php b/include/staff/ticket-edit.inc.php
index c79f36d60285e0732dc46387aa1aea406c9502b6..37697ea8c5059688306ceef2b077df57e1f1bf13 100644
--- a/include/staff/ticket-edit.inc.php
+++ b/include/staff/ticket-edit.inc.php
@@ -70,12 +70,17 @@ if ($_POST)
             </td>
             <td>
                 <select name="source">
-                    <option value="" selected >&mdash; <?php echo __('Select Source');?> &mdash;</option>
-                    <option value="Phone" <?php echo ($info['source']=='Phone')?'selected="selected"':''; ?>><?php echo __('Phone');?></option>
-                    <option value="Email" <?php echo ($info['source']=='Email')?'selected="selected"':''; ?>><?php echo __('Email');?></option>
-                    <option value="Web"   <?php echo ($info['source']=='Web')?'selected="selected"':''; ?>><?php echo __('Web');?></option>
-                    <option value="API"   <?php echo ($info['source']=='API')?'selected="selected"':''; ?>><?php echo __('API');?></option>
-                    <option value="Other" <?php echo ($info['source']=='Other')?'selected="selected"':''; ?>><?php echo __('Other');?></option>
+                    <option value="" selected >&mdash; <?php
+                        echo __('Select Source');?> &mdash;</option>
+                    <?php
+                    $source = $info['source'] ?: 'Phone';
+                    foreach (Ticket::getSources() as $k => $v) {
+                        echo sprintf('<option value="%s" %s>%s</option>',
+                                $k,
+                                ($source == $k ) ? 'selected="selected"' : '',
+                                $v);
+                    }
+                    ?>
                 </select>
                 &nbsp;<font class="error"><b>*</b>&nbsp;<?php echo $errors['source']; ?></font>
             </td>
diff --git a/include/staff/ticket-open.inc.php b/include/staff/ticket-open.inc.php
index b8330a0f53b997a34bc54aa818cc16f16ed9bbde..c7680704fe2c8e8f9b6ec8d2100cb5592023b0cf 100644
--- a/include/staff/ticket-open.inc.php
+++ b/include/staff/ticket-open.inc.php
@@ -131,7 +131,9 @@ if ($_POST)
                 <select name="source">
                     <?php
                     $source = $info['source'] ?: 'Phone';
-                    foreach (Ticket::getSources() as $k => $v)
+                    $sources = Ticket::getSources();
+                    unset($sources['Web'], $sources['API']);
+                    foreach ($sources as $k => $v)
                         echo sprintf('<option value="%s" %s>%s</option>',
                                 $k,
                                 ($source == $k ) ? 'selected="selected"' : '',