public <T> T create (Class <T> type, T object) {
        if (!type.isInterface()) {
            throw new IllegalArgumentException(
                "Type argument of create(type,object) must be interface"
                );
        }

        if (enabled) {
            Class proxyClass = proxies.get(type);

            if (proxyClass == null) {
                /* Occasionally races may generate extra classes, we just discard
                 * them when this occurs.
                 */
                proxyClass = Proxy.getProxyClass(type.getClassLoader(), 
                                                 new Class[] { type });

                Class previous = proxies.putIfAbsent(type, proxyClass);

                if (previous != null) {
                    proxyClass = previous;
                }
            }

            try {
                Constructor <T> constructor =
                    proxyClass.getConstructor(InvocationHandler.class);

                return constructor.newInstance(
                    new TimedInvocationHandler(monitors, sampleSize,
                                               timeUnit, object)
                    );
            }
            catch (InvocationTargetException exception) {
                String message = "Unexpected exceptionin proxy constructor";

                log.error(message, exception);
                throw new IllegalStateException(message, exception);
            }
            catch (IllegalAccessException exception) {
                String message = "Unexpected error accessing proxy constructor";

                log.error(message, exception);
                throw new IllegalStateException(message, exception);
            }
            catch (InstantiationException exception) {
                String message = "Unexpected error thrown while building proxy";

                log.error(message, exception);
                throw new IllegalStateException(message, exception);
            }
            catch (NoSuchMethodException exception) {
                String message = "Unexpected missing constructor in proxy";

                log.error(message, exception);
                throw new IllegalStateException(message, exception);
            }
        }
        else {
            return object;
        }
    }