@SuppressWarnings({ "unchecked", "rawtypes" })
	public static Class<?>[] searchForAnnotation(Class<?> annotation) {
		ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
		final String TARGET_FORMAT = ".class";
		URL[] roots = findClassPaths();

		for (URL root : roots) {
			for (String relativePath : getChildren(root)) {

				if (relativePath.endsWith(TARGET_FORMAT)) {

					// Remove .class and change / to .
					String className = relativePath.substring(0,
							relativePath.length() - TARGET_FORMAT.length())
							.replace("/", ".");
					try {
						Class element = Class.forName(className);

						if (element.getAnnotation(annotation) != null) {
							classes.add(element);
						}
					} catch (ClassNotFoundException ex) {
						// Do nothing
					}
				}
			}
		}

		return classes.toArray(new Class[classes.size()]);
	}