private RDFNode createFunctionCall(Expr expr) {
		ExprFunction function = expr.getFunction();
		Resource f = getFunction(function);
		FunctionCall call = SPINFactory.createFunctionCall(model, f);
		if(addPrefixes) {
			String ns = f.getNameSpace();
			if(ns != null && model.getNsURIPrefix(ns) == null) {
				Map<String,String> extras = ExtraPrefixes.getExtraPrefixes();
				for(String prefix : extras.keySet()) {
					if(ns.equals(extras.get(prefix))) {
						model.setNsPrefix(prefix, ns);
					}
				}
			}
		}
		List<RDFNode> params = createParameters(function);
		List<Argument> args = f.as(Function.class).getArguments(true);
		for(int i = 0; i < params.size(); i++) {
			RDFNode arg = params.get(i);
			Property predicate =
				i < args.size() ? args.get(i).getPredicate() :
				model.getProperty(SP.NS + "arg" + (i + 1));
			call.addProperty(predicate, arg);
		}
		if(function instanceof ExprFunctionOp) {
			Element element = ((ExprFunctionOp)function).getElement();
			ElementList elements = createElementList(element);
			call.addProperty(SP.elements, elements);
		}
		return call;
	}