Index: /lang/perl/Net-Google-Spreadsheets/trunk/t/04_worksheet.t
===================================================================
--- /lang/perl/Net-Google-Spreadsheets/trunk/t/04_worksheet.t (revision 27454)
+++ /lang/perl/Net-Google-Spreadsheets/trunk/t/04_worksheet.t (revision 27538)
@@ -22,5 +22,5 @@
     $ss = $service->spreadsheet({title => $title});
     plan skip_all => "test spreadsheet '$title' doesn't exist." unless $ss;
-    plan tests => 27;
+    plan tests => 34;
 }
 {
@@ -29,11 +29,22 @@
 }
 {
-    my $title = 'new worksheet';
-    my $ws = $ss->add_worksheet({title => $title});
+    my $args = {
+        title => 'new worksheet',
+        row_count => 10,
+        col_count => 3,
+    };
+    my $ws = $ss->add_worksheet($args);
     isa_ok $ws, 'Net::Google::Spreadsheets::Worksheet';
-    is $ws->title, $title;
-    my $ws2 = $ss->worksheet({title => $title});
+    is $ws->title, $args->{title};
+    is $ws->row_count, $args->{row_count};
+    is $ws->col_count, $args->{col_count};
+    my $ws2 = $ss->worksheet({title => $args->{title}});
     isa_ok $ws2, 'Net::Google::Spreadsheets::Worksheet';
-    is $ws2->title, $title;
+    is $ws2->title, $args->{title};
+    is $ws2->row_count, $args->{row_count};
+    is $ws2->col_count, $args->{col_count};
+    ok $ws2->delete;
+    ok ! grep {$_->id eq $ws->id} $ss->worksheets;
+    ok ! grep {$_->id eq $ws2->id} $ss->worksheets;
 }
 {
@@ -43,5 +54,5 @@
 {
     my $before = scalar $ss->worksheets;
-    my $ws = $ss->add_worksheet;
+    my $ws = $ss->add_worksheet({title => 'new_worksheet'});
     isa_ok $ws, 'Net::Google::Spreadsheets::Worksheet';
     is scalar $ss->worksheets, $before + 1;
@@ -72,5 +83,6 @@
     my $ws = ($ss->worksheets)[-1];
     ok $ws->delete;
-    is scalar $ss->worksheets, $before - 1;
-    ok ! grep {$_ == $ws} $ss->worksheets;
+    my @after = $ss->worksheets;
+    is scalar @after, $before - 1;
+    ok ! grep {$_->id eq $ws->id} @after;
 }
Index: /lang/perl/Net-Google-Spreadsheets/trunk/MANIFEST
===================================================================
--- /lang/perl/Net-Google-Spreadsheets/trunk/MANIFEST (revision 27355)
+++ /lang/perl/Net-Google-Spreadsheets/trunk/MANIFEST (revision 27538)
@@ -22,4 +22,5 @@
 lib/Net/Google/Spreadsheets/Row.pm
 lib/Net/Google/Spreadsheets/Spreadsheet.pm
+lib/Net/Google/Spreadsheets/UserAgent.pm
 lib/Net/Google/Spreadsheets/Worksheet.pm
 Makefile.PL
Index: /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets.pm
===================================================================
--- /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets.pm (revision 27460)
+++ /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets.pm (revision 27538)
@@ -1,4 +1,5 @@
 package Net::Google::Spreadsheets;
 use Moose;
+use 5.008;
 
 extends 'Net::Google::Spreadsheets::Base';
@@ -63,5 +64,5 @@
     my $feed = $self->feed(
         $self->contents,
-        $cond
+        $cond,
     );
     
@@ -104,24 +105,43 @@
 
   # find a spreadsheet by key
-  my $spreadsheet = $service->spreadsheet({key => 'pZV-pns_sm9PtH2WowhU2Ew'});
+  my $spreadsheet = $service->spreadsheet(
+    {
+        key => 'pZV-pns_sm9PtH2WowhU2Ew'
+    }
+  );
 
   # find a spreadsheet by title
-  my $spreadsheet = $service->spreadsheet({title => 'list for new year cards'});
-  my $worksheet = $spreadsheet->worksheet(1);
-
-  my @fields = $worksheet->fields();
-
-  my $inserted_row = $worksheet->insert(
-    {
-        name => 'danjou',
-    }
-  );
-
-  my @rows = $worksheet->rows;
-
-  my $row = $worksheet->row(1);
-
-  $row->update(
-    {
+  my $spreadsheet_by_title = $service->spreadsheet(
+    {
+        title => 'list for new year cards'
+    }
+  );
+
+  # find a worksheet by title
+  my $worksheet = $spreadsheet->worksheet(
+    {
+        title => 'Sheet1'
+    }
+  );
+
+  # create a worksheet
+  my $new_worksheet = $spreadsheet->add_worksheet(
+    {
+        title => 'Sheet2',
+        row_count => 100,
+        col_count => 3,
+    }
+  );
+
+  # update cell by batch request
+  $worksheet->batchupdate_cell(
+    {col => 1, row => 1, input_value => 'name'},
+    {col => 2, row => 1, input_value => 'nick'},
+    {col => 3, row => 1, input_value => 'mail'},
+  );
+
+  my $new_row = $worksheet->add_row(
+    {
+        name => 'Nobuo Danjou',
         nick => 'lopnor',
         mail => 'nobuo.danjou@gmail.com',
@@ -129,7 +149,56 @@
   );
 
+  my @rows = $worksheet->rows;
+
+  my $row = $worksheet->row(1);
+
+  $row->content(
+    {
+        nick => 'lopnor',
+        mail => 'nobuo.danjou@gmail.com',
+    }
+  );
+
 =head1 DESCRIPTION
 
 Net::Google::Spreadsheets is a Perl module for using Google Spreadsheets API.
+
+=head1 METHODS
+
+=head2 new
+
+Creates Google Spreadsheet API client. It takes arguments below:
+
+=over 4
+
+=item username
+
+Username for google. This should be full email address format like 'username@gmail.com'.
+
+=item password
+
+Password corresponding to the username.
+
+=back
+
+=head2 spreadsheets(\%condition)
+
+returns list of Net::Google::Spreadsheets::Spreadsheet objects. Acceptable arugments are:
+
+=over 4
+
+=item title
+
+title of the spreadsheet.
+
+=item title-exact
+
+whether title search should match exactly or not.
+
+=back
+
+=head2 spreadsheet(\%condition)
+
+Returns first item of spreadsheets(\%condition) if available.
 
 =head1 AUTHOR
Index: /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/Worksheet.pm
===================================================================
--- /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/Worksheet.pm (revision 27454)
+++ /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/Worksheet.pm (revision 27538)
@@ -47,4 +47,9 @@
     my ($self, $cond) = @_;
     return $self->list_contents('Net::Google::Spreadsheets::Row', $cond);
+}
+
+sub row {
+    my ($self, $cond) = @_;
+    return ($self->rows($cond))[0];
 }
 
Index: /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/UserAgent.pm
===================================================================
--- /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/UserAgent.pm (revision 27460)
+++ /lang/perl/Net-Google-Spreadsheets/trunk/lib/Net/Google/Spreadsheets/UserAgent.pm (revision 27538)
@@ -58,5 +58,5 @@
 #        warn $res->request->as_string;
 #        warn $res->as_string;
-        croak "request failed: ",$res->code;
+        die sprintf("request for '%s' failed: %s", $uri, $res->status_line);
     }
     return $res;
