diff -Naur a/username_check.unique.inc b/username_check.unique.inc
--- a/username_check.unique.inc	2013-10-23 21:24:22.236810806 +0200
+++ b/username_check.unique.inc	2013-10-23 21:52:21.056810606 +0200
@@ -17,23 +17,39 @@
   if ($ret) {
     $output['allowed'] = FALSE;
     $output['msg'] = $ret;
-  }
-  else {
-    $ret = user_is_blocked($username);
-    if ($ret) {
-      $output['allowed'] = FALSE;
-      $output['msg'] = t('The username %username is not allowed.', array('%username' => $username));
+  } else {
+    // custom_username_validation module integration
+    if (module_exists('custom_username_validation')) {
+      // If user may override validation, just skip
+      if (!user_access('override custom username validation')) {
+        $pattern = variable_get('custom_username_validation_pattern', '');
+
+        // Validate only if pattern is set in module settings
+        if ($pattern != '' && !@preg_match($pattern, $username)) {
+          $output['allowed'] = FALSE;
+          $output['msg'] = $ret = t(variable_get('custom_username_validation_errormsg', ''));
+        }
+      }
     }
-    else {
-      $username = check_plain($username);
-      $ret = _username_check_is_user_exists($username);
 
+    // no previous error
+    if (!$ret) {
+      $ret = user_is_blocked($username);
       if ($ret) {
         $output['allowed'] = FALSE;
-        $output['msg'] = t('The name %username is already taken.', array('%username' => $username));
+        $output['msg'] = t('The username %username is not allowed.', array('%username' => $username));
       }
       else {
-        $output['allowed'] = TRUE;
+        $username = check_plain($username);
+        $ret = _username_check_is_user_exists($username);
+
+        if ($ret) {
+          $output['allowed'] = FALSE;
+          $output['msg'] = t('The name %username is already taken.', array('%username' => $username));
+        }
+        else {
+          $output['allowed'] = TRUE;
+        }
       }
     }
   }
