private static void registerMethods( String identifier, Method[] methods, boolean needsStatic )
    {
        for ( Method method : methods )
        {
            if ( !method.isAnnotationPresent( OptionListener.class ) )
            {
                continue; // an option listener MUST have the OptionListener annotation
            }
            if ( !Modifier.isPublic( method.getModifiers() ) )
            {
                continue; // an option listener MUST be public
            }
            if ( needsStatic && !Modifier.isStatic( method.getModifiers() ) )
            {
                continue; // if required, the methods must be static
            }
            if ( method.getParameterTypes().length > 1 )
            {
                continue; // an option listener has either none or 1 parameter
            }

            Lumberjack.debug( "PropList", "%s.%s()", identifier, method.getName() ); // start out log

            OptionListener listener = method.getAnnotation( OptionListener.class ); // get the option listener class
            String[] fieldNames = listener.value(); // get the names of the fields it will be listening for a property change to

            // iterate over every Option description the listener describes
            for ( String s : fieldNames )
            {
                addOptionListener( s, method ); // and attach the OptionListener to each
            }
        }
    }