diff --git a/lib/elixir/lib/access.ex b/lib/elixir/lib/access.ex
index cd9e791d34b..a06d20384b1 100644
--- a/lib/elixir/lib/access.ex
+++ b/lib/elixir/lib/access.ex
@@ -31,8 +31,13 @@ defimpl Access, for: List do
 
   """
 
-  def access(list, atom) when is_atom(atom) do
-    Keyword.get(list, atom)
+  def access([], _key), do: nil
+
+  def access(list, key) do
+    case :lists.keyfind(key, 1, list) do
+      { ^key, value } -> value
+      false -> nil
+    end
   end
 
 end
diff --git a/lib/elixir/test/elixir/access_test.exs b/lib/elixir/test/elixir/access_test.exs
index fdc0854fc50..8744afe7c2f 100644
--- a/lib/elixir/test/elixir/access_test.exs
+++ b/lib/elixir/test/elixir/access_test.exs
@@ -7,6 +7,9 @@ defmodule AccessTest do
     assert [foo: :bar][:foo] == :bar
     assert [foo: [bar: :baz]][:foo][:bar] == :baz
     assert [foo: [bar: :baz]][:fuu][:bar] == nil
+    assert [{"foo", :bar}]["foo"] == :bar
+    assert [{"foo", [{"bar", :baz}]}]["foo"]["bar"] == :baz
+    assert [{"foo", [{"bar", :baz}]}]["fuu"]["bar"] == nil
   end
 
   test :nil do