private void loadPlugins()  {
		print("Loading modules");
		
		File pluginsDir = new File(homeDir, "plugins");
		// Create plugins folder if it doesn't exist
		if (!pluginsDir.isDirectory()) {
			pluginsDir.mkdir();
		}
		
		// Scan for plugins
		File[] pluginFiles = pluginsDir.listFiles(new FilenameFilter() {
			@Override
			public boolean accept(File arg0, String arg1) {
				return arg1.endsWith(".jar");
			}
		});
		
		if (pluginFiles.length == 0) {
			print("ERROR: No modules were loaded! LAURA will have no functionality!");
			exit();
		}
		
		// Iterate through .jar files
		JarFileLoader classLoader;
		JarFile jarFile;
		for (File plugin: pluginFiles) {
			try {
				classLoader = new JarFileLoader(new URL[]{plugin.toURI().toURL()});
				jarFile = new JarFile(plugin);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				continue;
			}
			
			// Search through the JAR for class files
			Enumeration<JarEntry> entries = jarFile.entries();
			while (entries.hasMoreElements()) {
				JarEntry element = entries.nextElement();
				if (element.getName().endsWith(".class")) {
					try {
						// Instantiate a module and add it to Laura.modules
						Class<?> c = Class.forName(
							element.getName().replaceAll(".class", "").replaceAll("/", "."),
							true, classLoader
						);
						
						Module m = (Module)c.newInstance();
						m.init(this);
						modules.add(m);
					} catch (ClassNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (InstantiationException | ClassCastException | IllegalAccessException e) {
						// Class isn't a module. No need to panic.
					}
				}
			}
		}
		
		print("Successfully loaded " + modules.size() + " modules");
		
		// Add the DefaultModule last - it simply says the command was not understood.
		Module defaultModule = new DefaultModule();
		defaultModule.init(this);
		modules.add(defaultModule);
	}