public List<Argument> getArguments(boolean ordered) {
		List<Argument> results = new ArrayList<Argument>();
		Set<Resource> classes = JenaUtil.getAllSuperClasses(this);
		classes.add(this);
		for(Resource cls : classes) {
			StmtIterator it = cls.listProperties(SPIN.constraint);
			while(it.hasNext()) {
				Statement s = it.nextStatement();
				if(s.getObject().isResource() && JenaUtil.hasIndirectType(s.getResource(), (Resource)SPL.Argument.inModel(s.getModel()))) {
					results.add((Argument)s.getResource().as(Argument.class));
				}
			}
		}
		
		if(ordered) {
			Collections.sort(results, new Comparator<Argument>() {
				public int compare(Argument o1, Argument o2) {
					Property p1 = o1.getPredicate();
					Property p2 = o2.getPredicate();
					if(p1 != null && p2 != null) {
						return p1.getLocalName().compareTo(p2.getLocalName());
					}
					else {
						return 0;
					}
				}
			});
		}
		
		return results;
	}