-//
-// The DLLFactory template class inherits from DLLFactoryBase.
-// The constructor takes the file name of the shared library
-// and the undecorated "C" symbol name of the factory creator
-// function. The factory creator function in your shared library
-// MUST either return a pointer to an object that is a subclass
-// of 'T' or it must return 0.
-//
-// If everything is cool, then 'factory' will point to the
-// requested factory class. If not, it will be 0.
-//
-// Since the DLLFactory template ultimately inherits DLLManager,
-// you can call LastError() to get any error code information
-//
-// The created factory is OWNED by the DLLFactory class.
-// The created factory will get deleted when the DLLFactory class
-// is deleted, because the DLL will get unloaded as well.
-//
-
-template <class T> class DLLFactory : public DLLFactoryBase
+/** This is the highest-level class of the DLLFactory system used to load InspIRCd modules and commands.
+ * All the dirty mucking around with dl*() is done by DLLManager, all this does it put a pretty shell on
+ * it and make it nice to use to load modules and core commands. This class is quite specialised for these
+ * two uses and it may not be useful more generally -- use DLLManager directly for that.
+ */
+template <typename ReturnType> class CoreExport DLLFactory : public DLLManager