diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d0659c34acd826dc173cb96a3e8c344bfc32f7ec..f4e7af8fe0305e854917f156ceb69aa2c4bf39cd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -37,7 +37,7 @@ aws_publish:
     - /^\d+[.]\d+[.]\d+$/ # Only publish HEAD tagged with semantic version
   script:
     - rebar3 edoc
-    - aws s3 cp doc s3://s3.erlang.ninja/gurka/$CI_BUILD_REF_NAME/ --recursive
+    - aws s3 cp doc s3://s3.erlang.ninja/tsuru/$CI_BUILD_REF_NAME/ --recursive
     - rebar3 as production do tar
-    - aws s3 cp _build/production/rel/gurka/gurka-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/gurka/
-    - aws s3 cp s3://s3.erlang.ninja/gurka/gurka-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/gurka/gurka-latest.tar.gz
+    - aws s3 cp _build/production/rel/tsuru/tsuru-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/tsuru/
+    - aws s3 cp s3://s3.erlang.ninja/tsuru/tsuru-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/tsuru/tsuru-latest.tar.gz
diff --git a/Makefile b/Makefile
index 843e42fd0797895486db4b12a4c8035c968d1032..ecced7c1a5c72599e28fbbdf5f9193688e9617bd 100644
--- a/Makefile
+++ b/Makefile
@@ -28,3 +28,6 @@ clean:
 
 distclean:
 	@rm -rf _build rebar.lock $(REBAR)
+
+shell:
+	@$(REBAR) shell
diff --git a/src/tsuru_application.erl b/src/tsuru_application.erl
new file mode 100644
index 0000000000000000000000000000000000000000..743b8ebe8f7abb78f351d95b3bdb735827d8c66f
--- /dev/null
+++ b/src/tsuru_application.erl
@@ -0,0 +1,31 @@
+-module(tsuru_application).
+-author("erikh").
+
+%% API
+-export([get_os_env/1]).
+
+get_os_env(Application) ->
+    Pattern = string:to_upper(atom_to_list(Application)) ++ "_(.+)=(.+)",
+    get_os_env(Pattern, os:getenv(), erl_eval:new_bindings()).
+
+%%%===================================================================
+%%% Internal functions
+%%%===================================================================
+get_os_env(_Pattern, [], Bindings) ->
+    erl_eval:bindings(Bindings);
+
+get_os_env(Pattern, [Var | Vars], Bindings) ->
+    case re:run(Var, Pattern) of
+        {match, [{0, _}, {S1, L1}, {S2, L2}]} ->
+            Name = list_to_atom(string:to_lower(string:substr(Var, S1 + 1, L1))),
+            try
+                {ok, ErlTokens, _} = erl_scan:string(string:substr(Var, S2 + 1, L2) ++ "."),
+                {ok, ErlAbsForm} = erl_parse:parse_exprs(ErlTokens),
+                {value, Value, _} = erl_eval:exprs(ErlAbsForm, Bindings),
+                get_os_env(Pattern, Vars, erl_eval:add_binding(Name, Value, Bindings))
+            catch
+                _:_ -> get_os_env(Pattern, Vars, erl_eval:add_binding(Name, string:substr(Var, S2 + 1, L2), Bindings))
+            end;
+        nomatch ->
+            get_os_env(Pattern, Vars, Bindings)
+    end.
diff --git a/src/tsuru_string.erl b/src/tsuru_string.erl
new file mode 100644
index 0000000000000000000000000000000000000000..1b2b941c33c9326a70a486fcbe9975a55e5e58ff
--- /dev/null
+++ b/src/tsuru_string.erl
@@ -0,0 +1,20 @@
+-module(tsuru_string).
+-author("erikh").
+
+%% API
+-export([prefix_matches/2, strip_prefix/2]).
+
+prefix_matches([H | Prefix], [H | String]) ->
+    prefix_matches(Prefix, String);
+
+prefix_matches([], _String) ->
+    true;
+
+prefix_matches(_Prefix, _String) ->
+    false.
+
+strip_prefix([H | Prefix], [H | String]) ->
+    strip_prefix(Prefix, String);
+
+strip_prefix(_Prefix, String) ->
+    String.
diff --git a/test/tsuru_application_test.erl b/test/tsuru_application_test.erl
new file mode 100644
index 0000000000000000000000000000000000000000..0af7f87d6df485bd5e50d98b5cb5ca96490d8b47
--- /dev/null
+++ b/test/tsuru_application_test.erl
@@ -0,0 +1,16 @@
+-module(tsuru_application_test).
+-author("erikh").
+
+-include_lib("eunit/include/eunit.hrl").
+
+get_os_env_test() ->
+    os:putenv("TEST_NUMBER", "123"),
+    os:putenv("TEST_NON_EVAL", "/1/2/3"),
+    os:putenv("TEST_STRING", "\"/1/2/3\""),
+    os:putenv("TEST_ATOM", "'/1/2/3'"),
+    ?assertEqual(tsuru_application:get_os_env(test), [
+        {atom, '/1/2/3'},
+        {non_eval, "/1/2/3"},
+        {number, 123},
+        {string, "/1/2/3"}
+    ]).
diff --git a/test/tsuru_string_test.erl b/test/tsuru_string_test.erl
new file mode 100644
index 0000000000000000000000000000000000000000..1209a66c75518802c1853623bc2128589a03d8e2
--- /dev/null
+++ b/test/tsuru_string_test.erl
@@ -0,0 +1,11 @@
+-module(tsuru_string_test).
+-author("erikh").
+
+-include_lib("eunit/include/eunit.hrl").
+
+prefix_matches_test() ->
+    ?assert(tsuru_string:prefix_matches("HELLO", "HELLO_WORLD")),
+    ?assertNot(tsuru_string:prefix_matches("HELLOW", "HELLO_WORLD")).
+
+strip_prefix_test() ->
+    ?assertEqual(tsuru_string:strip_prefix("HELLO_", "HELLO_WORLD"), "WORLD").