diff --git a/support.admin.inc b/support.admin.inc
index 2063cdd..4328416 100644
--- a/support.admin.inc
+++ b/support.admin.inc
@@ -261,18 +261,15 @@ function support_admin_client_validate($form, &$form_state) {
  */
 function support_admin_client_submit($form, &$form_state) {
   if ($form_state['clicked_button']['#value'] == t('Delete client')) {
-    drupal_set_message(t('Client %client deleted.', array('%client' => $form_state['values']['name'])));
-    db_query('DELETE FROM {support_client} WHERE clid = %d', $form_state['values']['clid']);
+    support_client_delete($form_state['values']['clid']);
   }
   else {
-    db_query("UPDATE {support_client} SET name = '%s', path = '%s', status = %d, parent = %d, integrate_email = %d, server_name = '%s', server_username = '%s', server_password = '%s', mailbox = '%s', mailfrom = '%s', protocol = %d, extra = '%s', port = %d, autoassign = '%s', autosubscribe = '%s', thread_subject = %s, domains = '%s', user_creation = '%s', notes = '%s' WHERE clid = %d", check_plain($form_state['values']['name']), $form_state['values']['path'], $form_state['values']['status'], $form_state['values']['parent'], $form_state['values']['integrate_email'], $form_state['values']['server_name'], $form_state['values']['server_username'], $form_state['values']['server_password'], $form_state['values']['mailbox'], $form_state['values']['mailfrom'], $form_state['values']['protocol'], $form_state['values']['extra'], $form_state['values']['port'], $form_state['values']['autoassign'], $form_state['values']['autosubscribe'], $form_state['values']['thread_subject'], $form_state['values']['domains'], $form_state['values']['user_creation'], $form_state['values']['notes'], $form_state['values']['clid']);
-    if (!db_affected_rows()) {
-      // This message can be displayed erroneously if nothing was changed as well.
-      drupal_set_message(t('Client %client added.', array('%client' => $form_state['values']['name'])));
-      @db_query("INSERT INTO {support_client} (name, path, status, parent, integrate_email, server_name, server_username, server_password, mailbox, mailfrom, protocol, extra, port, autoassign, autosubscribe, thread_subject, domains, user_creation, notes) VALUES('%s', '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', %d, '%s', %d, '%s', '%s', '%d', '%s', '%s', '%s')", check_plain($form_state['values']['name']), $form_state['values']['path'], $form_state['values']['status'], $form_state['values']['parent'], $form_state['values']['integrate_email'], $form_state['values']['server_name'], $form_state['values']['server_username'], $form_state['values']['server_password'], $form_state['values']['mailbox'], $form_state['values']['mailfrom'], $form_state['values']['protocol'], $form_state['values']['extra'], $form_state['values']['port'], $form_state['values']['autoassign'], $form_state['values']['autosubscribe'], $form_state['values']['thread_subject'], $form_state['values']['domains'], $form_state['values']['user_creation'], $form_state['values']['notes']);
+    // fake a merge query
+    if (db_result(db_query("SELECT COUNT(*) FROM {support_client} WHERE clid=%d", $form_state['values']['clid']))) {
+      support_client_update($form_state['values']['clid'], $form_state['values']['name'], $form_state['values']['path'], $form_state['values']['status'], $form_state['values']['parent'], $form_state['values']['integrate_email'], $form_state['values']['server_name'], $form_state['values']['server_username'], $form_state['values']['server_password'], $form_state['values']['mailbox'], $form_state['values']['mailfrom'], $form_state['values']['protocol'], $form_state['values']['extra'], $form_state['values']['port'], $form_state['values']['autoassign'], $form_state['values']['autosubscribe'], $form_state['values']['thread_subject'], $form_state['values']['domains'], $form_state['values']['user_creation'], $form_state['values']['notes']);
     }
     else {
-      drupal_set_message(t('Client %client updated.', array('%client' => $form_state['values']['name'])));
+      support_client_create($form_state['values']['name'], $form_state['values']['path'], $form_state['values']['status'], $form_state['values']['parent'], $form_state['values']['integrate_email'], $form_state['values']['server_name'], $form_state['values']['server_username'], $form_state['values']['server_password'], $form_state['values']['mailbox'], $form_state['values']['mailfrom'], $form_state['values']['protocol'], $form_state['values']['extra'], $form_state['values']['port'], $form_state['values']['autoassign'], $form_state['values']['autosubscribe'], $form_state['values']['thread_subject'], $form_state['values']['domains'], $form_state['values']['user_creation'], $form_state['values']['notes']);
     }
   }
   // clean page cache and block cache
diff --git a/support.module b/support.module
index fd417cf..b18151d 100644
--- a/support.module
+++ b/support.module
@@ -3253,3 +3253,111 @@ function _support_autosubscribe_access() {
   return (user_access('administer support') ||
     user_access('can subscribe other users to notifications'));
 }
+
+/**
+ * Delete a client
+ * 
+ * @param $clid
+ *   The client ID of the client to delete
+ */
+function support_client_delete($clid) {
+  $name = db_result(db_query('SELECT name FROM {support_client} WHERE clid = %d', $clid));
+  db_query('DELETE FROM {support_client} WHERE clid = %d', $clid);
+  drupal_set_message(t('Client %client deleted.', array('%client' => $name)));
+}
+
+/**
+ * Update a client
+ *
+ * @param $clid
+ *   The client ID of the client to update
+ * @param $name
+ *   Client's name
+ * @param $path
+ *   Path to the client's tickets
+ * @param $status
+ *   Client's status
+ * @param $parent
+ *   Client's parent client
+ * @param $integrate_email
+ *   Integrate client with email server
+ * @param $server_name
+ *   Hostname or IP address of the mail server
+ * @param $server_username
+ *   Client's email username
+ * @param $server_password
+ *   Client's email password
+ * @param $mailbox
+ *   Mailbox path on mail server
+ * @param $mailfrom
+ *   Email address for sending notification emails
+ * @param $protocol
+ *   Protocol for mail server
+ * @param $extra
+ *   Additional flags
+ * @param $port
+ *   TCP port for downloading email messages
+ * @param $autoassign
+ *   Username to auto-assign new tickets to for this client
+ * @param $autosubscribe
+ *   Usernames to auto-subscribe to client's issues
+ * @param $thread_subject
+ *   Thread emails using subject
+ * @param $domains
+ *   Valid email domains
+ * @param $user_creation
+ *   Automatic creation of user
+ * @param $notes
+ *   Administrative notes
+ */
+function support_client_update($clid, $name, $path, $status = 0, $parent = '', $integrate_email = 0, $server_name = '', $server_username = '', $server_password = '', $mailbox = '', $mailfrom = '', $protocol = 0, $extra = '', $port = 0, $autoassign = '', $autosubscribe = NULL, $thread_subject = 0, $domains = NULL, $user_creation= 0, $notes = NULL) {
+  db_query("UPDATE {support_client} SET name = '%s', path = '%s', status = %d, parent = %d, integrate_email = %d, server_name = '%s', server_username = '%s', server_password = '%s', mailbox = '%s', mailfrom = '%s', protocol = %d, extra = '%s', port = %d, autoassign = '%s', autosubscribe = '%s', thread_subject = %s, domains = '%s', user_creation = '%s', notes = '%s' WHERE clid = %d", check_plain($name), $path, $status, $parent, $integrate_email, $server_name, $server_username, $server_password, $mailbox, $mailfrom, $protocol, $extra, $port, $autoassign, $autosubscribe, $thread_subject, $domains, $user_creation, $notes, $clid);
+  drupal_set_message(t('Client %client updated.', array('%client' => $name)));
+}
+
+/**
+ * Add a client
+ *
+ * @param $name
+ *   Client's name
+ * @param $path
+ *   Path to the client's tickets
+ * @param $status
+ *   Client's status
+ * @param $parent
+ *   Client's parent client
+ * @param $integrate_email
+ *   Integrate client with email server
+ * @param $server_name
+ *   Hostname or IP address of the mail server
+ * @param $server_username
+ *   Client's email username
+ * @param $server_password
+ *   Client's email password
+ * @param $mailbox
+ *   Mailbox path on mail server
+ * @param $mailfrom
+ *   Email address for sending notification emails
+ * @param $protocol
+ *   Protocol for mail server
+ * @param $extra
+ *   Additional flags
+ * @param $port
+ *   TCP port for downloading email messages
+ * @param $autoassign
+ *   Username to auto-assign new tickets to for this client
+ * @param $autosubscribe
+ *   Usernames to auto-subscribe to client's issues
+ * @param $thread_subject
+ *   Thread emails using subject
+ * @param $domains
+ *   Valid email domains
+ * @param $user_creation
+ *   Automatic creation of user
+ * @param $notes
+ *   Administrative notes
+ */
+function support_client_create($name, $path, $status = 0, $parent = '', $integrate_email = 0, $server_name = '', $server_username = '', $server_password = '', $mailbox = '', $mailfrom = '', $protocol = 0, $extra = '', $port = 0, $autoassign = '', $autosubscribe = NULL, $thread_subject = 0, $domains = NULL, $user_creation= 0, $notes = NULL) {
+  db_query("INSERT INTO {support_client} (name, path, status, parent, integrate_email, server_name, server_username, server_password, mailbox, mailfrom, protocol, extra, port, autoassign, autosubscribe, thread_subject, domains, user_creation, notes) VALUES('%s', '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', %d, '%s', %d, '%s', '%s', '%d', '%s', '%s', '%s')", check_plain($name), $path, $status, $parent, $integrate_email, $server_name, $server_username, $server_password, $mailbox, $mailfrom, $protocol, $extra, $port, $autoassign, $autosubscribe, $thread_subject, $domains, $user_creation, $notes);
+  drupal_set_message(t('Client %client added.', array('%client' => $name)));
+}
