diff --git a/inc/auth.php b/inc/auth.php
index 6e3b543de1db5775f7e84b77ecbd93d234f920e2..8d6f487387e83a3864b3553a94942cac89a34505 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -630,7 +630,7 @@ function register(){
   }
 
   //okay try to create the user
-  if(!$auth->createUser($_POST['login'],$pass,$_POST['fullname'],$_POST['email'])){
+  if(!$auth->triggerUserMod('create', array($_POST['login'],$pass,$_POST['fullname'],$_POST['email']))){
     msg($lang['reguexists'],-1);
     return false;
   }
@@ -715,7 +715,7 @@ function updateprofile() {
     }
   }
 
-  return $auth->modifyUser($_SERVER['REMOTE_USER'], $changes);
+  return $auth->triggerUserMod('modify', array($_SERVER['REMOTE_USER'], $changes));
 }
 
 /**
@@ -764,7 +764,7 @@ function act_resendpwd(){
         }
 
         $pass = auth_pwgen();
-        if (!$auth->modifyUser($user,array('pass' => $pass))) {
+        if (!$auth->triggerUserMod('modify', array($user,array('pass' => $pass)))) {
             msg('error modifying user data',-1);
             return false;
         }
diff --git a/inc/auth/basic.class.php b/inc/auth/basic.class.php
index c3bb9d32ea79ffdf8fb3cb47947fee87ea51b9d8..c93e3d5c581894d10bb5b3d4aad23b99763d487b 100644
--- a/inc/auth/basic.class.php
+++ b/inc/auth/basic.class.php
@@ -89,6 +89,38 @@ class auth_basic {
     }
   }
 
+  /**
+   * Trigger the AUTH_USERDATA_CHANGE event and call the modification function. [ DO NOT OVERRIDE ]
+   *
+   * You should use this function instead of calling createUser, modifyUser or
+   * deleteUsers directly. The event handlers can prevent the modification, for
+   * example for enforcing a user name schema.
+   *
+   * @author Gabriel Birke <birke@d-scribe.de>
+   * @param string $type Modification type ('create', 'modify', 'delete')
+   * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type
+   * @return mixed Result from the modification function or false if an event handler has canceled the action
+   */
+  function triggerUserMod($type, $params)
+  {
+    $validTypes = array(
+      'create' => 'createUser',
+      'modify' => 'modifyUser',
+      'delete' => 'deleteUsers'
+    );
+    if(empty($validTypes[$type]))
+      return false;
+    $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null);
+    $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata);
+    if ($evt->advise_before(true)) {
+      $result = call_user_func_array(array($this, $validTypes[$type]), $params);
+      $evt->data['modification_result'] = $result;
+    }
+    $evt->advise_after();
+    unset($evt);
+    return $result;
+  }
+
   /**
    * Log off the current user [ OPTIONAL ]
    *
@@ -290,6 +322,7 @@ class auth_basic {
     return array();
   }
 
+
   /**
    * Check Session Cache validity [implement only where required/possible]
    *
diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php
index 0a3de919f8acf9819e2ae46efced88b1fb8b2b89..1d35c7abe1b6d05bd9e544c04362343f3954c7fd 100644
--- a/lib/plugins/usermanager/admin.php
+++ b/lib/plugins/usermanager/admin.php
@@ -346,7 +346,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
           return false;
         }
 
-        if ($ok = $this->_auth->createUser($user,$pass,$name,$mail,$grps)) {
+        if ($ok = $this->_auth->triggerUserMod('create', array($user,$pass,$name,$mail,$grps))) {
 
           msg($this->lang['add_ok'], 1);
 
@@ -373,7 +373,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         if (!is_array($selected) || empty($selected)) return false;
         $selected = array_keys($selected);
 
-        $count = $this->_auth->deleteUsers($selected);
+        $count = $this->_auth->triggerUserMod('delete', array($selected));
         if ($count == count($selected)) {
           $text = str_replace('%d', $count, $this->lang['delete_ok']);
           msg("$text.", 1);
@@ -454,7 +454,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         if (!empty($newgrps) && $this->_auth->canDo('modGroups') && $newgrps != $oldinfo['grps'])
           $changes['grps'] = $newgrps;
 
-        if ($ok = $this->_auth->modifyUser($olduser, $changes)) {
+        if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) {
           msg($this->lang['update_ok'],1);
 
           if (!empty($_REQUEST['usernotify']) && $newpass) {