Used -O2 instead of -O3 because -O3 doesn't has more downsides than benefits on gcc 4.x