added wraps decorator from functools so that wrapped functions are not named the same thing