=== Changes
==================================================================
--- Changes	(revision 22942)
+++ Changes	(local)
@@ -1,5 +1,8 @@
 0.02005
-
+    _ issue #21: added methods to _Group for empty_first_label, and refactored
+      item generation out of options, values, value_range to _get_empty_first_option,
+      which the others call.
+      
     - Bugfix: save_to_model() many_to_many multi-value fields where 
       'default_column' included the table name (or 'me.') failed.
 
=== lib/HTML/FormFu/Element/_Group.pm
==================================================================
--- lib/HTML/FormFu/Element/_Group.pm	(revision 22942)
+++ lib/HTML/FormFu/Element/_Group.pm	(local)
@@ -6,10 +6,12 @@
 
 use HTML::FormFu::ObjectUtil qw/ _coerce /;
 use HTML::FormFu::Util qw/ append_xml_attribute literal /;
+
 use Storable qw( dclone );
 use Carp qw( croak );
 
 __PACKAGE__->mk_accessors(qw/ _options empty_first /);
+__PACKAGE__->mk_output_accessors(qw/ empty_first_label/);
 
 my @ALLOWED_OPTION_KEYS = qw/
     group
@@ -56,13 +58,7 @@
         croak "options argument must be an array-ref" if $@;
 
         if ( $self->empty_first ) {
-            push @new,
-                {
-                value            => '',
-                label            => '',
-                attributes       => {},
-                label_attributes => {},
-                };
+            push @new, $self->_get_empty_first_option;
         }
 
         for my $item (@options) {
@@ -74,7 +70,16 @@
 
     return $self;
 }
-
+sub _get_empty_first_option {
+    my ( $self ) = @_;
+    my $l = $self->empty_first_label || '';
+    return {
+        value            => '',
+        label            => $l,
+        attributes       => {},
+        label_attributes => {},
+    };
+}
 sub _parse_option {
     my ( $self, $item ) = @_;
 
@@ -197,10 +202,6 @@
         croak "values argument must be an array-ref" if $@;
     }
 
-    if ( $self->empty_first ) {
-        unshift @values, '';
-    }
-
     @new = (
         map { { value            => $_,
                 label            => ucfirst $_,
@@ -209,6 +210,9 @@
             }
             } @values
     );
+    if ( $self->empty_first ) {
+        unshift @new, $self->_get_empty_first_option;
+    }
 
     $self->_options( \@new );
 
@@ -231,10 +235,6 @@
     my $end   = pop @values;
     my $start = pop @values;
 
-    if ( $self->empty_first ) {
-        unshift @values, '';
-    }
-
     return $self->values( [ @values, $start .. $end ] );
 }
 
=== t/elements/select_empty_first_label.t
==================================================================
--- t/elements/select_empty_first_label.t	(revision 22942)
+++ t/elements/select_empty_first_label.t	(local)
@@ -0,0 +1,81 @@
+use strict;
+use warnings;
+use lib 't/lib';
+
+use Test::More tests => 4;
+
+use HTML::FormFu;
+
+my $form = HTML::FormFu->new({
+    localize_class => 'HTMLFormFu::I18N',   
+});
+
+{
+    my $field = $form->element('Select')->name('foo');
+    $field->empty_first(1);
+    $field->empty_first_label('empty_label');
+    $field->options([ [ 1 => 'One' ], [ 2 => 'Two' ] ]);
+
+    my $field_xhtml = qq{<span class="select">
+<select name="foo">
+<option value="">empty_label</option>
+<option value="1">One</option>
+<option value="2">Two</option>
+</select>
+</span>};
+
+    is( "$field", $field_xhtml, 'stringified field' );
+    
+}
+
+{
+    my $field = $form->element('Select')->name('foo');
+    $field->empty_first(1);
+    $field->empty_first_label('empty_label');
+    $field->values([qw/one two/]);
+
+    my $field_xhtml = qq{<span class="select">
+<select name="foo">
+<option value="">empty_label</option>
+<option value="one">One</option>
+<option value="two">Two</option>
+</select>
+</span>};
+
+    is( "$field", $field_xhtml, 'stringified field' );
+    
+}
+{
+    my $field = $form->element('Select')->name('foo');
+    $field->empty_first(1);
+    $field->empty_first_label('empty_label');
+    $field->value_range([1, 2]);
+
+    my $field_xhtml = qq{<span class="select">
+<select name="foo">
+<option value="">empty_label</option>
+<option value="1">1</option>
+<option value="2">2</option>
+</select>
+</span>};
+
+    is( "$field", $field_xhtml, 'stringified field' );
+    
+}
+{
+    my $field = $form->element('Select')->name('foo');
+    $field->empty_first(1);
+    $field->empty_first_label_loc('test_label');
+    $field->options([ [ 1 => 'One' ], [ 2 => 'Two' ] ]);
+
+    my $field_xhtml = qq{<span class="select">
+<select name="foo">
+<option value="">My Label</option>
+<option value="1">One</option>
+<option value="2">Two</option>
+</select>
+</span>};
+
+    is( "$field", $field_xhtml, 'stringified field' );
+    
+}
\ No newline at end of file
