diff --git a/rebar.config b/rebar.config
index 009fb75fd2ad861be533a5bac9ab9c103ff299fa..526bffc5395ef0ff5bea3ebff50323533e58a83b 100644
--- a/rebar.config
+++ b/rebar.config
@@ -1,3 +1,5 @@
+{global_rebar_dir, ".rebar3"}.
+
 {relx, [
     {release, {tsuru, semver}, [tsuru]},
     {dev_mode, true},
diff --git a/src/tsuru.app.src b/src/tsuru.app.src
index 0669c255fe3e015ae3abb446db975af067508fa3..aca9ef5e0087ea2e9c0800aa25b3316b0383f716 100644
--- a/src/tsuru.app.src
+++ b/src/tsuru.app.src
@@ -1,5 +1,5 @@
 {application, tsuru, [{description, "A collection of useful tools for Erlang applications"},
-    {vsn, "1.2.1"},
+    {vsn, "1.3.0"},
     {applications, [kernel, stdlib]},
     {modules, []},
     {registered, []},
diff --git a/src/tsuru_math.erl b/src/tsuru_math.erl
new file mode 100644
index 0000000000000000000000000000000000000000..3c6492c8b93cc62819628e46559a5f3a6d34e080
--- /dev/null
+++ b/src/tsuru_math.erl
@@ -0,0 +1,23 @@
+-module(tsuru_math).
+
+-export([floor/1, ceiling/1]).
+
+-spec floor(number()) -> integer().
+floor(X) when X < 0 ->
+    T = trunc(X),
+    case X - T == 0 of
+        true -> T;
+        false -> T - 1
+    end;
+floor(X) ->
+    trunc(X).
+
+-spec ceiling(number()) -> integer().
+ceiling(X) when X < 0 ->
+    trunc(X);
+ceiling(X) ->
+    T = trunc(X),
+    case X - T == 0 of
+        true -> T;
+        false -> T + 1
+    end.
diff --git a/test/tsuru_math_test.erl b/test/tsuru_math_test.erl
new file mode 100644
index 0000000000000000000000000000000000000000..4612294a35ba4a30452fb655cc6615594d4cba34
--- /dev/null
+++ b/test/tsuru_math_test.erl
@@ -0,0 +1,13 @@
+-module(tsuru_math_test).
+
+-include_lib("eunit/include/eunit.hrl").
+
+floor_test() ->
+    ?assertEqual(-5, tsuru_math:floor(-5.0)),
+    ?assertEqual(2, tsuru_math:floor(2.3)),
+    ?assertEqual(-4, tsuru_math:floor(-3.9)).
+
+ceiling_test() ->
+    ?assertEqual(5, tsuru_math:ceiling(5.0)),
+    ?assertEqual(3, tsuru_math:ceiling(2.3)),
+    ?assertEqual(-3, tsuru_math:ceiling(-3.9)).