diff --git a/cgi-bin/css/ldapns.css b/cgi-bin/css/ldapns.css
index 7dea251c40cb426249bb0df5338cada1e9c916e9..141df70c8448eb4de6124acd4afe64885cec2e4a 100644
--- a/cgi-bin/css/ldapns.css
+++ b/cgi-bin/css/ldapns.css
@@ -297,8 +297,20 @@
 
 .ldapns_field select {
   margin: 0.2em 1em 0.2em 1em;
+  padding: 0.2em 0.2em 0.2em 0.2em;
 }
 
+.ldapns_field select[multiple] {
+  padding: 0.2em 1em 0.2em 0.2em;
+}
+
+/*
+select[multiple] {
+  size: 15;
+  height: 100%;
+}
+*/
+
 .ldapns_field .ldapns_fb_checkbox {
   position: relative;
   float: left;
diff --git a/ldap_NS.pl b/ldap_NS.pl
index 152c894738c5400954972a3b9069d2eb719d93d6..146c8b8084eeb01317b79d9ab99cdea31d2df43e 100755
--- a/ldap_NS.pl
+++ b/ldap_NS.pl
@@ -105,7 +105,7 @@ INIT {
   my $uid = '[a-zA-Z][\-a-zA-Z0-9]{6,16}';
   $validate->{'UID'} = '/^'.$uid.'$/';
 
-  my $word = '[a-zA-Z0-9][a-zA-Z0-9_-]{1,}[a-zA-Z0-9]';
+  my $word = '[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]';
   my $anchored_word = '/^'.$word.'$/';
 
   my $peopletree = $SNET::LdapNS::PEOPLE.','.$SNET::LdapNS::SNET;
@@ -916,6 +916,31 @@ sub refresh_userInfos {
 
 }
 
+sub getsize_multipleselect($) {
+
+  my $options = $_[0];
+  my $size = 0;
+
+  if (defined($options)) {
+    if (ref($options) eq 'ARRAY') {
+      $size = scalar(@{$options});
+    }
+    elsif (ref($options) eq 'HASH') {
+      $size = scalar(keys(%{$options}));
+    }
+  }
+
+  if ($size > 10) {
+    $size = 10;
+  }
+  elsif ($size < 5) {
+    $size = 5;
+  }
+
+  return $size;
+
+}
+
 sub print_ns_headers($) {
 
   my $title = shift;
@@ -1214,6 +1239,7 @@ sub display_userinfos {
     options => $options,
     sortopts => 'NAME',
     type => 'select',
+    size  => getsize_multipleselect($options),
     multiple => 1,
   );
 
@@ -1509,6 +1535,7 @@ EOJS
     name => 'group',
     options => $options,
     type => 'select',
+    size => getsize_multipleselect($options),
     sortopts => 'NAME',
     selectname => 0,
     multiple => 0,
@@ -1679,6 +1706,12 @@ EOJS
     multiple => 0,
   );
 
+  if ($type eq 'select') {
+    $form->field(
+      size => getsize_multipleselect($options),
+    );
+  }
+
   print_ns_headers("LdapNS delete users");
   print $form->render();
   print_ns_footers;
@@ -1844,6 +1877,12 @@ EOJS
     multiple => 0,
   );
 
+  if ($type eq 'select') {
+    $form->field(
+      size => getsize_multipleselect($options),
+    );
+  }
+
   print_ns_headers("LdapNS reset passwords");
   print $form->render();
   print_ns_footers;
@@ -1919,6 +1958,7 @@ EOJS
     options => $options,
     sortopts => 'NAME',
     type => 'select',
+    size => getsize_multipleselect($options),
     multiple => 0,
   );
 
@@ -2202,6 +2242,7 @@ sub display_groupinfos {
     options => $options,
     optgroups => 1,
     type => 'select',
+    size  => getsize_multipleselect($options),
     multiple => 1,
   );
 
@@ -2609,6 +2650,12 @@ EOJS
     multiple => 0,
   );
 
+  if ($type eq 'select') {
+    $form->field(
+      size => getsize_multipleselect($options),
+    );
+  }
+
   print_ns_headers("LdapNS delete groups");
   print $form->render();
   print_ns_footers;
@@ -2845,6 +2892,13 @@ EOJS
       multiple => 1,
       disable => (scalar(keys(%{$deloptions})) == 0),
     );
+
+    if ($type eq 'select') {
+      $form->field(
+        size => getsize_multipleselect($deloptions),
+      );
+    }
+
   }
   else {
     $form->tmpl_param('disable_deluser' => 1);
@@ -2860,6 +2914,13 @@ EOJS
       multiple => 1,
       disable => (scalar(keys(%{$addoptions})) == 0),
     );
+
+    if ($type eq 'select') {
+      $form->field(
+        size => getsize_multipleselect($addoptions),
+      );
+    }
+
   }
   else {
     $form->tmpl_param('disable_adduser' => 1);
@@ -3167,6 +3228,7 @@ EOJS
     options => $options,
     sortopts => 'NAME',
     type => 'select',
+    size => getsize_multipleselect($options),
     multiple => 0,
   );
 
@@ -3585,6 +3647,7 @@ sub display_policyinfos {
     options => $options,
     sortopts => 'NAME',
     type => 'select',
+    size => getsize_multipleselect($options),
     multiple => 1,
   );