diff --git a/add_trailing_comma.py b/add_trailing_comma.py
index 784e00b..da4d733 100644
--- a/add_trailing_comma.py
+++ b/add_trailing_comma.py
@@ -59,7 +59,8 @@ def _is_star_star_kwarg(node):
 
 class FindNodes(ast.NodeVisitor):
     def __init__(self):
-        self.calls = {}
+        # multiple calls can report their starting position as the same
+        self.calls = collections.defaultdict(list)
         self.funcs = {}
         self.literals = {}
 
@@ -109,7 +110,7 @@ class FindNodes(ast.NodeVisitor):
 
         if arg_offsets and not only_a_generator:
             key = Offset(node.lineno, node.col_offset)
-            self.calls[key] = Call(node, has_starargs, arg_offsets)
+            self.calls[key].append(Call(node, has_starargs, arg_offsets))
 
         self.generic_visit(node)
 
@@ -312,33 +313,30 @@ def _fix_src(contents_text, py35_plus):
     tokens = src_to_tokens(contents_text)
     for i, token in _changing_list(tokens):
         key = Offset(token.line, token.utf8_byte_offset)
-        add_comma = True
-        fix_data = None
 
+        fixes = []
         if key in visitor.calls:
-            call = visitor.calls[key]
-            # Only fix stararg calls if asked to
-            add_comma = not call.star_args or py35_plus
-            fix_data = _find_call(call, i, tokens)
+            for call in visitor.calls[key]:
+                # Only fix stararg calls if asked to
+                add_comma = not call.star_args or py35_plus
+                fixes.append((add_comma, _find_call(call, i, tokens)))
         elif key in visitor.funcs:
-            func = visitor.funcs[key]
             # functions can be treated as calls
-            fix_data = _find_call(func, i, tokens)
+            fixes.append((True, _find_call(visitor.funcs[key], i, tokens)))
         # Handle parenthesized things
         elif token.src == '(':
-            fix_data = _find_simple(i, tokens)
-            add_comma = False
-
-        if fix_data is not None:
-            _fix_brace(fix_data, add_comma, tokens)
+            fixes.append((False, _find_simple(i, tokens)))
 
         # need to additionally handle literals afterwards as tuples report
         # their starting index as the first element, which may be one of the
         # above things.
         if key in visitor.literals:
             fix_data = _find_literal(visitor.literals[key], i, tokens)
+            fixes.append((True, fix_data))
+
+        for add_comma, fix_data in fixes:
             if fix_data is not None:
-                _fix_brace(fix_data, True, tokens)
+                _fix_brace(fix_data, add_comma, tokens)
 
     return tokens_to_src(tokens)
 

diff --git a/tests/add_trailing_comma_test.py b/tests/add_trailing_comma_test.py
index 12b7326..5229737 100644
--- a/tests/add_trailing_comma_test.py
+++ b/tests/add_trailing_comma_test.py
@@ -114,6 +114,16 @@ def test_py35_plus_rewrite():
             '    1,\n'
             ')',
         ),
+        # Regression test for #22
+        (
+            'x({}).y(\n'
+            '    x\n'
+            ')',
+
+            'x({}).y(\n'
+            '    x,\n'
+            ')',
+        ),
     ),
 )
 def test_fixes_calls(src, expected):

Regression f({}).y(...) is not adding commas
Seems I broke this in 0.4.3 because now the first function is being considered:

```python
f({}).y(
    x
)
```

should add a comma on the `x` line.
tests/add_trailing_comma_test.py::test_fixes_calls[x({}).y(\n
tests/add_trailing_comma_test.py::test_fix_calls_noops[x tests/add_trailing_comma_test.py::test_fix_calls_noops[x(1)] tests/add_trailing_comma_test.py::test_fix_calls_noops[tuple(\n tests/add_trailing_comma_test.py::test_fix_calls_noops[x(\n tests/add_trailing_comma_test.py::test_fix_calls_noops[x((\n tests/add_trailing_comma_test.py::test_fix_calls_noops[(\n tests/add_trailing_comma_test.py::test_py35_plus_rewrite tests/add_trailing_comma_test.py::test_fixes_calls[x(\n tests/add_trailing_comma_test.py::test_fixes_calls[foo()(\n tests/add_trailing_comma_test.py::test_noop_one_line_literals[(1, tests/add_trailing_comma_test.py::test_noop_one_line_literals[[1, tests/add_trailing_comma_test.py::test_noop_one_line_literals[{1, tests/add_trailing_comma_test.py::test_noop_one_line_literals[{1: tests/add_trailing_comma_test.py::test_noop_tuple_literal_without_braces tests/add_trailing_comma_test.py::test_noop_function_defs[def tests/add_trailing_comma_test.py::test_fixes_defs[def tests/add_trailing_comma_test.py::test_noop_unhugs[f(x, tests/add_trailing_comma_test.py::test_noop_unhugs[f(\n tests/add_trailing_comma_test.py::test_noop_unhugs[f((\n tests/add_trailing_comma_test.py::test_noop_unhugs[f([\n tests/add_trailing_comma_test.py::test_noop_unhugs[textwrap.dedent("""\n tests/add_trailing_comma_test.py::test_fix_unhugs[f(\n tests/add_trailing_comma_test.py::test_fix_unhugs[f(a,\n tests/add_trailing_comma_test.py::test_fix_unhugs[def tests/add_trailing_comma_test.py::test_fix_unhugs[with tests/add_trailing_comma_test.py::test_fix_unhugs[if tests/add_trailing_comma_test.py::test_fix_unhugs[{'foo': tests/add_trailing_comma_test.py::test_fix_unhugs[f(g(\n tests/add_trailing_comma_test.py::test_fix_unhugs[{"foo": tests/add_trailing_comma_test.py::test_fix_unhugs[x("foo", tests/add_trailing_comma_test.py::test_fix_unhugs[x("foo"\n tests/add_trailing_comma_test.py::test_fix_unhugs_py3_only[def tests/add_trailing_comma_test.py::test_noop_trailing_brace[[]] tests/add_trailing_comma_test.py::test_noop_trailing_brace[x tests/add_trailing_comma_test.py::test_noop_trailing_brace[y tests/add_trailing_comma_test.py::test_noop_trailing_brace[foo.\\\n tests/add_trailing_comma_test.py::test_fix_trailing_brace[x tests/add_trailing_comma_test.py::test_main_trivial tests/add_trailing_comma_test.py::test_main_noop tests/add_trailing_comma_test.py::test_main_changes_a_file tests/add_trailing_comma_test.py::test_main_syntax_error tests/add_trailing_comma_test.py::test_main_non_utf8_bytes tests/add_trailing_comma_test.py::test_main_py35_plus_argument_star_args tests/add_trailing_comma_test.py::test_main_py35_plus_argument_star_star_kwargs