diff --git a/src/dictionary-tree.mjs b/src/dictionary-tree.mjs
index c07d603057fd3d526f2466e013ca30ffca0d2286..21f4dc23a98327d47a4bcd254f5f89ebc48f432e 100644
--- a/src/dictionary-tree.mjs
+++ b/src/dictionary-tree.mjs
@@ -131,3 +131,27 @@ export function serialize(treeStruct) {
 	if (isStep(treeStruct)) return treeStruct.step.map(serialize).join('');
 	throw new Error(`Error: how to serialize ${JSON.stringify(treeStruct)} RAW: ${treeStruct}`);
 }
+
+/*
+export function extract(treeNavArray,fromTreeWrapped){
+	if(!Array.isArray(treeNavArray)) throw new Error(`treeNav: ${JSON.stringify(treeNavArray)} should be an integer array.`);
+	let extractedTree = '';
+	if(treeNavArray.length === 0) return fromTreeWrapped.pop();
+	if (typeof fromTreeWrapped[0] === 'string') throw new Error(`invalid treeNav pointer ${JSON.stringify(treeNavArray)} in ${serialize(fromTreeWrapped[0])} no branch ${treeNavArray[0]}.`);
+	if (Array.isArray(fromTreeWrapped[0])) {
+		const branch = treeNavArray.shift();
+		const extractedTree = fromTreeWrapped[0][branch]; // recursive here ?
+		//fromTreeWrapped[0] = [].concat(branch>0?fromTreeWrapped[0].slice(0,branch-1):[],fromTreeWrapped[0].slice(branch+1,fromTreeWrapped[0].length));
+		return extractedTree;
+	}
+	if (isStep(fromTreeWrapped[0])) {
+		const extractedTree = {step:[]};
+		fromTreeWrapped[0].step.forEach()
+
+		f
+	}
+
+
+	return extractedTree;
+}
+*/
diff --git a/src/dictionary-tree.test.mjs b/src/dictionary-tree.test.mjs
index b9ff604f3894bcc4d4253a9dc4ca416221999463..74c45015a113be407be2cc851714aaf2481fd620 100644
--- a/src/dictionary-tree.test.mjs
+++ b/src/dictionary-tree.test.mjs
@@ -18,3 +18,21 @@ test('build complexe tree with (|) pattern', t => t.is(buildTreeStruct('(a(|b@@@
 ));
 test('serialize tree to a(b|c)', t => t.is(app.serialize({step: ['a', ['b', 'c']]}), 'a(b|c)'));
 test('serialize incorrect tree throw', t => t.throws(() => app.serialize({plop: ['a']})));
+
+const exempleTree = ()=>app.buildTreeStruct('a(b(c|d)|e(f|g|h)ij(k|l)|@@@@m)')
+test.skip('extract subtree ae(f|g|h)ij(k|l) from a(b(c|d)|e(f|g|h)ij(k|l)|@@@@m)',t =>{
+	const srcTree = exempleTree();
+	const treePointer = [1];
+	const extractedTree = app.extract(treePointer,[srcTree]);
+
+	t.is(JSON.stringify(extractedTree), expected({step: ['ae', ['f', 'g', 'h'], 'ij']}))
+	t.is(app.serialize(srcTree), 'a(b(c|d)|@@@@k)')
+});
+test.skip('extract subtree aehij from a(b(c|d)|e(f|g|h)ij(k|l)|@@@@m)',t =>{
+	const srcTree = exempleTree();
+	const treePointer = [1,2];
+	const extractedTree = app.extract(treePointer,[srcTree]);
+
+	t.is(extractedTree, 'aehij');
+	t.is(app.serialize(srcTree), 'a(b(c|d)|e(f|g)ij|@@@@k)')
+});