@Override
    public final synchronized Class getIFunctionClassDefinition(final Object targetObject, final Method targetMethod ) throws JFKException{
	try {
	    // check params
	    if( ClassLoaderStatus.BUSY.equals( status ) )
		throw new JFKException("The classloader is busy!");

	    if( (targetObject == null) || (targetMethod == null) )
		throw new IllegalArgumentException("Cannot proceed without the method and the target object");

	    if( (! targetMethod.isAnnotationPresent( Function.class )) && (! targetMethod.isAnnotationPresent(Connect.class))   )
		throw new CannotBindFunctionException("The specified method is not a function/connect annotated one!");

	    // get the annotation name and parameters
	    if( targetMethod.isAnnotationPresent( Function.class) ){
		final Function functionAnnotation = targetMethod.getAnnotation( Function.class );
		functionNameFromAnnotation = functionAnnotation.name();
	    }
	    else if( targetMethod.isAnnotationPresent( Connect.class ) ){
		final Connect connectAnnotation = targetMethod.getAnnotation( Connect.class );
		functionNameFromAnnotation = connectAnnotation.name();
	    }

	    // set the parameters for the loader
	    currentMethod = targetMethod;
	    targetInstance = targetObject;


	    // define the class
	    return findClass( IFunction.class.getName() );
	} catch (final ClassNotFoundException e) {
	    logger.error("Error defining the IFunction class", e);
	    throw new JFKException(e);
	}
    }