public ArrayList<FeatureResult> extractFeaturesFrom(MouseLogParser parser) {
		ArrayList<FeatureResult> fr=new ArrayList<FeatureResult>();
		fr.addAll(parser.getUserProfile().extract());
		try {
			// want to dynamically 'load' feature set
			//so we can add features without having to modify this code.
			//All features must implement the Feature interface
			Reflections reflections = new Reflections("edu.pace.mouse.biometric.features");
			Set<Class<? extends Feature>> setclasses = reflections.getSubTypesOf(Feature.class);
			Object []classes = (Object[])setclasses.toArray();
			String t1;
			for(int i=0;i<classes.length-1;i++){
				int index = i; 
				t1 = classes[i].toString();
				for(int j=i+1;j<classes.length;j++){
					if (t1.compareTo(classes[j].toString())>0){
						index = j;
						t1 = classes[j].toString();
					}
				}
				if (i != index){
					Object temp = classes[index];
					classes[index]=classes[i];
					classes[i] = temp;
				}
			}
			Constructor constructor;
			for (int i = 0; i < classes.length; i++) {
				constructor = ((Class)classes[i]).getConstructor(new Class[] { MouseLogParser.class });
				((Feature) constructor.newInstance(parser)).extract();
				fr.addAll(((Feature) constructor.newInstance(parser)).extract());
			}
		} catch (Exception ex) {
			throw new RuntimeException(ex);
		}
		return fr;
	}