 
   # Make the server ask for the data
   defp get_at_genserver(id, f, options) do
-    val = GenServer.call(__MODULE__, {:get, id, f}, 60_000)
+    val = try do
+      GenServer.call(__MODULE__, {:get, id, f}, Keyword.get(options, :ttl, 5_000))
+    catch
+      :exit, {:timeout, where} ->
+        Logger.error("Timeout getting data for cache. #{inspect id}.")
+        Logger.debug("Somebody else asked for the data, and did not answer in 5 sec.")
+        # If there are more, mark them as timeouted too
+        GenServer.cast(__MODULE__, {:remove, id, :exit})
+        {:error, :exit}
+    end
 
     if val == :youdoit do # this marks I must do it, and then send the value for the rest.
       val = try do

  def handle_cast({:insert, id, value}, status) do
    :ets.insert(__MODULE__, {id, value})

    # Logger.debug("Got answer for #{inspect id} -> #{inspect value}: #{inspect status[id]}")
    Enum.map(status[id], fn from ->
      GenServer.reply(from, value)
    end)

            Process.send_after(__MODULE__, {:remove, id, :timeout}, ttl)
        end
      else # reply error, but dont cache it
        GenServer.cast(__MODULE__, {:remove, id, val})
      end
      val
    else
      val
    end
  end
