more flexible sub return