             Process.send_after(__MODULE__, {:remove, id, :timeout}, ttl)
         end
       else # reply error, but dont cache it
-        GenServer.cast(__MODULE__, {:remove, id, :exit})
+        GenServer.cast(__MODULE__, {:remove, id, val})
       end
-      # Logger.debug("Calculated value #{inspect {id, val}}")
       val
     else
-      # Logger.debug("From cache 2  #{inspect {id, val}}")
       val
     end
   end

        prev_from = Map.get(status,id, nil)
        if prev_from == nil do # the first calculates the value
          status = Map.put(status, id, [] )
          # Logger.debug("No answer, you do it #{inspect status}")
          {:reply, :youdoit, status}
        else
          # Logger.debug("No anwser, wait for it #{inspect status}")
          status = Map.put(status, id, [from | prev_from] )
          {:noreply, status}
        end


  # Make the server ask for the data
  defp get_at_genserver(id, f, options) do
    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
