public ComponentManager() {
		// load all the classes in our desired package (the components package)
		try {
			// get the code source that we're in
			CodeSource src = CommandsManager.class.getProtectionDomain().getCodeSource();
			if(src != null) {
				URL jar = src.getLocation();
				ZipInputStream zip = new ZipInputStream(jar.openStream());
				
				// get our class loader
				File myFile = new File("plugins/MCNSAEssentials.jar");
				URL myJarFileURL = new URL("jar", "", "file:" + myFile.getAbsolutePath() + "!/");
				URL[] classes = {myJarFileURL};
				URLClassLoader classLoader = new URLClassLoader(classes, this.getClass().getClassLoader());
				
				// now loop over our files
				ZipEntry ze = null;
				assert(classLoader != null);
				while((ze = zip.getNextEntry()) != null) {
					String entryName = ze.getName();
					if(entryName.endsWith(".class") && entryName.startsWith("com/mcnsa/essentials/components/")) {						
						// get it's class
						Class<?> clazz = Class.forName(entryName.replaceAll("/", ".").substring(0, entryName.length() - 6), true, classLoader);
						
						// get its information
						if(!clazz.isAnnotationPresent(ComponentInfo.class)) {
							// no component info!
							// skip it!
							Logger.debug("no component info for class '%s'! Skipping...", clazz.getSimpleName());
							continue;
						}
						ComponentInfo ci = clazz.getAnnotation(ComponentInfo.class); 
						
						// create a component object
						Component component = new Component();
						component.clazz = clazz;
						component.instance = null; // don't initialize yet!
						component.componentInfo = ci;
						
						// register an instance of it
						registeredComponents.put(clazz.getSimpleName().toLowerCase(), component);
						
						// see if the class has a database info annotation
						// if it does, add it to the list of tables to be created
						if(clazz.isAnnotationPresent(DatabaseTableInfo.class)) {
							// get our info
							DatabaseTableInfo tableInfo = clazz.getAnnotation(DatabaseTableInfo.class);
							
							// register it with the database manager
							DatabaseManager.addTableConstruct(tableInfo);
						}
					}
				}
			}
			else {
				Logger.error("code source was null!");
			}
		}
		catch(Exception e) {
			e.printStackTrace();
			Logger.error("Failed to load component classes!");
		}
	}