diff --git a/satella/random.py b/satella/random.py
index ebafc1232707abade6520a8f4a56b3bb3385598f..ba42308d0b610e9e3acaa91aea2657a5e4f834c4 100644
--- a/satella/random.py
+++ b/satella/random.py
@@ -1,3 +1,4 @@
+import typing as tp
 import os
 import random
 import typing as tp
@@ -8,22 +9,27 @@ __all__ = ['shuffle_together', 'random_binary', 'random_word']
 from satella.coding.typing import T
 
 
-def random_word(length: int, choice: T = string.ascii_lowercase,
-                join_fun: tp.Callable[[T, ...], T] = lambda *args: ''.join(args)):
+def random_word(length: int, choice: tp.Sequence[T] = string.ascii_lowercase,
+                join_fun: tp.Callable[[tp.List[T]], T] = lambda args: ''.join(args)) -> \
+        tp.Sequence[T]:
     """
     Build and return a random word of provided length.
 
     The word will be built by calling join_fun with length of arguments picked
     at random from choice.
 
+    Best used with strings. Provide a word length, a string to choose from as choice (defaults
+    to string.ascii_lowercase). Will return by default a string (which coincidentally
+    happens to be a sequence of strings, albeit one-character ones).
+
     :param length: length of the word
     :param choice: a range of characters to use. By default is string.ascii_lowercase
-    :param join_fun: an argument to be called with randomly picked characters as *args.
+    :param join_fun: an argument to be called with a list of randomly picked values.
         Defaults to ''.join(args), so your T must be a string. If you're passing a
         different type, remember to alter this function because the default one expects strings!
     :return: a random word
     """
-    return join_fun(*(random.choice(choice) for _ in range(length)))
+    return join_fun([random.choice(choice) for _ in range(length)])
 
 
 def random_binary(length: int) -> bytes: