diff --git a/lib/Selenium/ActionChains.pm b/lib/Selenium/ActionChains.pm
index a7b3cf3..8667ea7 100644
--- a/lib/Selenium/ActionChains.pm
+++ b/lib/Selenium/ActionChains.pm
@@ -153,17 +153,40 @@ sub key_up {
 }
 
 sub send_keys {
-    my $self = shift;
-    my $keys = shift;
+    my ($self,$keys) =@_;
+
+    # Do nothing if there are no keys to send
+    return unless $keys;
+
+    # DWIM
+    $keys = [split('',$keys)] unless ref $keys eq 'ARRAY';
+
     push @{ $self->actions },
-      sub { $self->driver->get_active_element->send_keys($keys) };
+      sub {
+          foreach my $key (@$keys) {
+              $self->key_down($key, $self->driver->get_active_element);
+              $self->key_up($key, $self->driver->get_active_element);
+          }
+      };
     $self;
 }
 
 sub send_keys_to_element {
-    my $self = shift;
-    my ( $element, $keys ) = @_;
-    push @{ $self->actions }, sub { $element->send_keys($keys) };
+    my ($self, $element, $keys) =@_;
+
+    # Do nothing if there are no keys to send
+    return unless $keys;
+
+    # DWIM
+    $keys = [split('',$keys)] unless ref $keys eq 'ARRAY';
+
+    push @{ $self->actions },
+        sub {
+            foreach my $key (@$keys) {
+                $self->key_down($key,$element);
+                $self->key_up($key,$element);
+            }
+        };
     $self;
 }
 
@@ -388,7 +411,8 @@ Releases a held mouse_button
 
 =head2 send_keys
 
-Sends keys to the currently focused element
+Sends keys to the currently focused element.
+Essentially an alias around key_down then key_up.
 
     Args:
         The keys to send
@@ -398,7 +422,7 @@ Sends keys to the currently focused element
 
 =head2 send_keys_to_element
 
-Sends keys to an element
+Sends keys to an element in much the same fashion as send_keys.
 
     Args:
         A Selenium::Remote::WebElement