private boolean deprojectivizeWithHead(DependencyStructure pdg, DependencyNode node) throws MaltChainedException {
		boolean success = true, childSuccess = false;
		int i, childAttempts = 2;
		DependencyNode child, possibleSyntacticHead;
		String syntacticHeadDeprel;
		if (nodeLifted.get(node.getIndex())) {
			syntacticHeadDeprel = synacticHeadDeprel.get(node.getIndex());
			possibleSyntacticHead = breadthFirstSearchSortedByDistanceForHead(pdg, node.getHead(), node, syntacticHeadDeprel);
			if (possibleSyntacticHead != null) {
				pdg.moveDependencyEdge(possibleSyntacticHead.getIndex(), node.getIndex());
				nodeLifted.set(node.getIndex(), false);
			} else {
				success = false;
			}
		}
		while (!childSuccess && childAttempts > 0) {
			childSuccess = true;
			Vector<DependencyNode> children = new Vector<DependencyNode>();
			i = 0;
			while ((child = node.getLeftDependent(i)) != null) {
				children.add(child);
				i++;
			}
			i = 0;
			while ((child = node.getRightDependent(i)) != null) {
				children.add(child);
				i++;
			}
			for (i = 0; i < children.size(); i++) {
				child = children.get(i);
				if (!deprojectivizeWithHead(pdg, child)) {
					childSuccess = false;
				}
			}
			childAttempts--;
		}
		return childSuccess && success;
	}