diff --git a/lib/poolex.ex b/lib/poolex.ex
index 27fac6f..426e2ea 100644
--- a/lib/poolex.ex
+++ b/lib/poolex.ex
@@ -35,7 +35,7 @@ defmodule Poolex do
   alias Poolex.Private.State
   alias Poolex.Private.WaitingCallers
 
-  @default_checkout_timeout :timer.seconds(5)
+  @default_checkout_timeout to_timeout(second: 5)
   @poolex_options_table """
   | Option                 | Description                                          | Example               | Default value                     |
   |------------------------|------------------------------------------------------|-----------------------|-----------------------------------|
@@ -370,7 +370,7 @@ defmodule Poolex do
           |> Monitoring.add(new_worker, :worker)
           |> BusyWorkers.add(new_worker)
 
-        {:reply, {:ok, new_worker}, %State{state | overflow: state.overflow + 1}}
+        {:reply, {:ok, new_worker}, %{state | overflow: state.overflow + 1}}
       else
         state =
           state
@@ -494,7 +494,7 @@ defmodule Poolex do
 
     if WaitingCallers.empty?(state) do
       if state.overflow > 0 do
-        %State{state | overflow: state.overflow - 1}
+        %{state | overflow: state.overflow - 1}
       else
         {:ok, new_worker} = start_worker(state)
 
diff --git a/lib/poolex/private/busy_workers.ex b/lib/poolex/private/busy_workers.ex
index 2d528fd..41b743e 100644
--- a/lib/poolex/private/busy_workers.ex
+++ b/lib/poolex/private/busy_workers.ex
@@ -6,13 +6,13 @@ defmodule Poolex.Private.BusyWorkers do
   @doc false
   @spec init(State.t(), busy_workers_impl :: module()) :: State.t()
   def init(%State{} = state, impl) do
-    %State{state | busy_workers_impl: impl, busy_workers_state: impl.init()}
+    %{state | busy_workers_impl: impl, busy_workers_state: impl.init()}
   end
 
   @doc false
   @spec add(State.t(), Poolex.worker()) :: State.t()
   def add(%State{busy_workers_impl: impl, busy_workers_state: busy_workers_state} = state, worker) do
-    %State{state | busy_workers_state: impl.add(busy_workers_state, worker)}
+    %{state | busy_workers_state: impl.add(busy_workers_state, worker)}
   end
 
   @doc false
@@ -24,7 +24,7 @@ defmodule Poolex.Private.BusyWorkers do
   @doc false
   @spec remove(State.t(), Poolex.worker()) :: State.t()
   def remove(%State{busy_workers_impl: impl, busy_workers_state: busy_workers_state} = state, worker) do
-    %State{state | busy_workers_state: impl.remove(busy_workers_state, worker)}
+    %{state | busy_workers_state: impl.remove(busy_workers_state, worker)}
   end
 
   @doc false
diff --git a/lib/poolex/private/idle_workers.ex b/lib/poolex/private/idle_workers.ex
index 03470d3..56619e0 100644
--- a/lib/poolex/private/idle_workers.ex
+++ b/lib/poolex/private/idle_workers.ex
@@ -6,19 +6,19 @@ defmodule Poolex.Private.IdleWorkers do
   @doc false
   @spec init(State.t(), idle_workers_impl :: module(), list(Poolex.worker())) :: State.t()
   def init(%State{} = state, impl, workers) do
-    %State{state | idle_workers_impl: impl, idle_workers_state: impl.init(workers)}
+    %{state | idle_workers_impl: impl, idle_workers_state: impl.init(workers)}
   end
 
   @doc false
   @spec add(State.t(), Poolex.worker()) :: State.t()
   def add(%State{idle_workers_impl: impl, idle_workers_state: idle_workers_state} = state, worker) do
-    %State{state | idle_workers_state: impl.add(idle_workers_state, worker)}
+    %{state | idle_workers_state: impl.add(idle_workers_state, worker)}
   end
 
   @doc false
   @spec remove(State.t(), Poolex.worker()) :: State.t()
   def remove(%State{idle_workers_impl: impl, idle_workers_state: idle_workers_state} = state, worker) do
-    %State{state | idle_workers_state: impl.remove(idle_workers_state, worker)}
+    %{state | idle_workers_state: impl.remove(idle_workers_state, worker)}
   end
 
   @doc false
@@ -44,7 +44,7 @@ defmodule Poolex.Private.IdleWorkers do
   def pop(%State{idle_workers_impl: impl, idle_workers_state: idle_workers_state} = state) do
     case impl.pop(idle_workers_state) do
       {worker, new_idle_workers_state} ->
-        {worker, %State{state | idle_workers_state: new_idle_workers_state}}
+        {worker, %{state | idle_workers_state: new_idle_workers_state}}
 
       :empty ->
         :empty
diff --git a/lib/poolex/private/metrics.ex b/lib/poolex/private/metrics.ex
index 0db840b..c2d7445 100644
--- a/lib/poolex/private/metrics.ex
+++ b/lib/poolex/private/metrics.ex
@@ -38,7 +38,7 @@ defmodule Poolex.Private.Metrics do
     else
       :telemetry_poller.start_link(
         measurements: measurements,
-        period: :timer.seconds(1),
+        period: to_timeout(second: 1),
         name: :"#{pool_id}_metrics_poller"
       )
     end
diff --git a/lib/poolex/private/waiting_callers.ex b/lib/poolex/private/waiting_callers.ex
index b552a38..55b816b 100644
--- a/lib/poolex/private/waiting_callers.ex
+++ b/lib/poolex/private/waiting_callers.ex
@@ -6,13 +6,13 @@ defmodule Poolex.Private.WaitingCallers do
   @doc false
   @spec init(State.t(), waiting_callers_impl :: module()) :: State.t()
   def init(%State{} = state, impl) do
-    %State{state | waiting_callers_impl: impl, waiting_callers_state: impl.init()}
+    %{state | waiting_callers_impl: impl, waiting_callers_state: impl.init()}
   end
 
   @doc false
   @spec add(State.t(), Poolex.Caller.t()) :: State.t()
   def add(%State{waiting_callers_impl: impl, waiting_callers_state: waiting_callers_state} = state, caller) do
-    %State{state | waiting_callers_state: impl.add(waiting_callers_state, caller)}
+    %{state | waiting_callers_state: impl.add(waiting_callers_state, caller)}
   end
 
   @doc false
@@ -26,7 +26,7 @@ defmodule Poolex.Private.WaitingCallers do
   def pop(%State{waiting_callers_impl: impl, waiting_callers_state: waiting_callers_state} = state) do
     case impl.pop(waiting_callers_state) do
       {caller, new_waiting_callers_state} ->
-        {caller, %State{state | waiting_callers_state: new_waiting_callers_state}}
+        {caller, %{state | waiting_callers_state: new_waiting_callers_state}}
 
       :empty ->
         :empty
@@ -36,7 +36,7 @@ defmodule Poolex.Private.WaitingCallers do
   @doc false
   @spec remove_by_pid(State.t(), caller_pid :: pid()) :: State.t()
   def remove_by_pid(%State{waiting_callers_impl: impl, waiting_callers_state: waiting_callers_state} = state, caller) do
-    %State{state | waiting_callers_state: impl.remove_by_pid(waiting_callers_state, caller)}
+    %{state | waiting_callers_state: impl.remove_by_pid(waiting_callers_state, caller)}
   end
 
   @doc false
@@ -45,7 +45,7 @@ defmodule Poolex.Private.WaitingCallers do
         %State{waiting_callers_impl: impl, waiting_callers_state: waiting_callers_state} = state,
         reference
       ) do
-    %State{
+    %{
       state
       | waiting_callers_state: impl.remove_by_reference(waiting_callers_state, reference)
     }
diff --git a/mix.lock b/mix.lock
index f9a5063..c3fb86c 100644
--- a/mix.lock
+++ b/mix.lock
@@ -15,7 +15,7 @@
   "makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"},
   "makeup_erlang": {:hex, :makeup_erlang, "1.0.2", "03e1804074b3aa64d5fad7aa64601ed0fb395337b982d9bcf04029d68d51b6a7", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "af33ff7ef368d5893e4a267933e7744e46ce3cf1f61e2dccf53a111ed3aa3727"},
   "nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
-  "styler": {:hex, :styler, "1.3.3", "5196fc9e9bf1254af4337b051103d38532c2f500b0f01bc6f53f56ee678f65e6", [:mix], [], "hexpm", "c275f73f2ff1b7dfafb03a0f8cf3e928709a235a2b049162b40168f53ba3a07c"},
+  "styler": {:hex, :styler, "1.4.0", "5944723d08afe4d38210b674d7e97dd1137a75968a85a633983cc308e86dc5f2", [:mix], [], "hexpm", "07de0e89c27490c8e469bb814d77ddaaa3283d7d8038501021d80a7705cf13e9"},
   "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"},
   "telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"},
 }
diff --git a/test/poolex_test.exs b/test/poolex_test.exs
index 24b0f28..ce9435b 100644
--- a/test/poolex_test.exs
+++ b/test/poolex_test.exs
@@ -89,7 +89,7 @@ defmodule PoolexTest do
       spawn(fn ->
         Poolex.run(pool_name, fn _pid ->
           Process.send(test_process, nil, [])
-          :timer.sleep(:timer.seconds(5))
+          :timer.sleep(to_timeout(second: 5))
         end)
       end)
 
@@ -175,7 +175,7 @@ defmodule PoolexTest do
       spawn(fn ->
         Poolex.run(pool_name, fn _pid ->
           Process.send(test_process, nil, [])
-          :timer.sleep(:timer.seconds(5))
+          :timer.sleep(to_timeout(second: 5))
         end)
       end)
 
@@ -224,14 +224,14 @@ defmodule PoolexTest do
 
       Enum.each(1..10, fn _ ->
         spawn(fn ->
-          Poolex.run(pool_name, fn pid -> GenServer.call(pid, {:do_some_work_with_delay, :timer.seconds(4)}) end)
+          Poolex.run(pool_name, fn pid -> GenServer.call(pid, {:do_some_work_with_delay, to_timeout(second: 4)}) end)
         end)
       end)
 
       waiting_caller =
         spawn(fn ->
           Poolex.run(pool_name, fn pid ->
-            GenServer.call(pid, {:do_some_work_with_delay, :timer.seconds(3)})
+            GenServer.call(pid, {:do_some_work_with_delay, to_timeout(second: 3)})
           end)
         end)
 
@@ -261,7 +261,7 @@ defmodule PoolexTest do
       caller =
         spawn(fn ->
           Poolex.run(pool_name, fn pid ->
-            GenServer.call(pid, {:do_some_work_with_delay, :timer.seconds(4)})
+            GenServer.call(pid, {:do_some_work_with_delay, to_timeout(second: 4)})
           end)
         end)
 
@@ -288,7 +288,7 @@ defmodule PoolexTest do
       caller =
         spawn(fn ->
           Poolex.run(pool_name, fn pid ->
-            GenServer.call(pid, {:do_some_work_with_delay, :timer.seconds(4)})
+            GenServer.call(pid, {:do_some_work_with_delay, to_timeout(second: 4)})
           end)
         end)
 
@@ -335,7 +335,7 @@ defmodule PoolexTest do
           Poolex.run(
             pool_name,
             fn pid ->
-              GenServer.call(pid, {:do_some_work_with_delay, :timer.seconds(4)})
+              GenServer.call(pid, {:do_some_work_with_delay, to_timeout(second: 4)})
             end,
             checkout_timeout: 100
           )
@@ -365,7 +365,7 @@ defmodule PoolexTest do
       result =
         Poolex.run(
           pool_name,
-          fn pid -> GenServer.call(pid, {:do_some_work_with_delay, :timer.seconds(4)}) end,
+          fn pid -> GenServer.call(pid, {:do_some_work_with_delay, to_timeout(second: 4)}) end,
           checkout_timeout: 100
         )
 
@@ -470,7 +470,7 @@ defmodule PoolexTest do
       result =
         Poolex.run(
           pool_name,
-          fn pid -> GenServer.call(pid, {:do_some_work_with_delay, :timer.seconds(4)}) end,
+          fn pid -> GenServer.call(pid, {:do_some_work_with_delay, to_timeout(second: 4)}) end,
           checkout_timeout: 100
         )
 
diff --git a/test/support/pool_helpers.ex b/test/support/pool_helpers.ex
index 4faf2b5..93d28cd 100644
--- a/test/support/pool_helpers.ex
+++ b/test/support/pool_helpers.ex
@@ -11,12 +11,12 @@ defmodule PoolHelpers do
   end
 
   @spec launch_long_task(Poolex.pool_id(), timeout()) :: :ok
-  def launch_long_task(pool_id, delay \\ :timer.seconds(4)) do
+  def launch_long_task(pool_id, delay \\ to_timeout(second: 4)) do
     launch_long_tasks(pool_id, 1, delay)
   end
 
   @spec launch_long_tasks(Poolex.pool_id(), non_neg_integer(), timeout()) :: :ok
-  def launch_long_tasks(pool_id, count, delay \\ :timer.seconds(4)) do
+  def launch_long_tasks(pool_id, count, delay \\ to_timeout(second: 4)) do
     for _i <- 1..count do
       spawn(fn ->
         Poolex.run(