Restructure the provide method slightly to handle objects better and to not throw when provided with a non-object