public int process(int signal) throws MaltChainedException {
		if (cachedGraph == null) {
			marking_strategy = OptionManager.instance().getOptionValue(getOptionContainerIndex(), "pproj", "marking_strategy").toString().trim();
			covered_root = OptionManager.instance().getOptionValue(getOptionContainerIndex(), "pproj", "covered_root").toString().trim();
			lifting_order = OptionManager.instance().getOptionValue(getOptionContainerIndex(), "pproj", "lifting_order").toString().trim();

			cachedGraph = (TokenStructure)flowChartinstance.getFlowChartRegistry(org.maltparser.core.syntaxgraph.TokenStructure.class, sourceName);
			if (!marking_strategy.equalsIgnoreCase("none") || !covered_root.equalsIgnoreCase("none")) { 
				pprojActive = true;
			}
		}
		
		if (pprojActive && cachedGraph instanceof DependencyStructure) {
			if (taskName.equals("proj")) {
					pproj.projectivize((DependencyStructure)cachedGraph);
			} else if (taskName.equals("merge")) {
					pproj.mergeArclabels((DependencyStructure)cachedGraph);
			} else if (taskName.equals("deproj")) {
					pproj.deprojectivize((DependencyStructure)cachedGraph);
			} else if (taskName.equals("split")) {
					pproj.splitArclabels((DependencyStructure)cachedGraph);
			}
		}
		return signal;
	}