diff --git a/Readme.md b/Readme.md
index a9f25c5..86f6df0 100644
--- a/Readme.md
+++ b/Readme.md
@@ -56,19 +56,68 @@
 
 ### Pronouns / Neo-pronouns (`PRON` / `PPER`)
 
-Merged pronoun pairs with gender markers are annotated:
+**Merged pronoun pairs** with gender markers receive `Gender=NonBin`:
 
 | Surface form | Lemma | FEATS |
 |---|---|---|
 | `sie*er` | `sie*er` | `Gender=NonBin` |
 | `er:sie` | `er:sie` | `Gender=NonBin` |
 
+**Lexicon-based neo-pronouns** are matched by exact surface form (case-insensitive) against a built-in lexicon sourced from [pronomen.net](https://pronomen.net/beliebige:neopronomen). All forms are tagged `PRON PPER` with `Gender=NonBin|PronType=Prs`; the lemma is the nominative form.
+
+#### Verschmelzung (blend pronouns)
+
+| Paradigm (NOM/DAT) | NOM | GEN | DAT | ACC |
+|---|---|---|---|---|
+| sier/siem | `sier` | `sies` | `siem` | `sien` |
+| xier/xiem | `xier` | `xies` | `xiem` | `xien` |
+| ersie/ihmihr | `ersie` | `seinihr` | `ihmihr` | `ihnsie` |
+
+#### They-ähnlich
+
+| Paradigm | NOM | GEN | DAT | ACC |
+|---|---|---|---|---|
+| dej/denen/dej | `dej` | _(deren)_ | _(denen)_ | `dej` |
+| dey/denen/dem | `dey` | _(deren)_ | _(denen)_ | _(dem)_ |
+| dey/denen/demm | `dey` | _(deren)_ | _(denen)_ | `demm` |
+| ey/emm | `ey` | `eys` | `emm` | `emm` |
+| they/them | `they` | `their` | `them` | `them` |
+
+Forms in italics are excluded from the lexicon because they are homonymous with standard German words (`deren`, `denen`, `dem`).
+
+#### Neuer Stamm (new-stem pronouns)
+
+| Paradigm | NOM | GEN | DAT | ACC |
+|---|---|---|---|---|
+| el/em | `el` | `ems` | `em` | `en` |
+| em/em | `em` | `ems` | `em` | `em` |
+| en/en | `en` | `enses` | `en` | `en` |
+| en/em | `en` | `ens` | `em` | `en` |
+| ens/ens | `ens` | `ens` | `ens` | `ens` |
+| et/siem | `et` | `sier` | `siem` | `sien` |
+| ex/ex | `ex` | `ex` | `ex` | `ex` |
+| hän/sim | `hän` | `sir` | `sim` | `sin` |
+| hen/hem | `hen` | `hens` | `hem` | `hen` |
+| hie/hiem | `hie` | `hein` | `hiem` | `hie` |
+| iks/iks | `iks` | `ikses` | `iks` | `iks` |
+| ind/inde | `ind` | `inds` | `inde` | `ind` |
+| mensch/mensch | `mensch` | `menschs` | `mensch` | `mensch` |
+| nin/nim | `nin` | `nims` | `nim` | `nin` |
+| oj/ojm | `oj` | `juj` | `ojm` | `ojn` |
+| per/per | `per` | `pers` | `per` | `per` |
+| ser/sem | `ser` | `ses` | `sem` | `sen` |
+| Y/Y | `Y` | `Ys` | `Y` | `Y` |
+| zet/zerm | `zet` | `zets` | `zerm` | `zern` |
+| \*/\* (Stern) | `*` | `*s` | `*` | `*` |
+
+Note: oblique forms of `et/siem` (`sier`, `siem`, `sien`) are shared with the `sier` paradigm and annotated with lemma `sier`.
+
 ### Known limitations
 
 - **Binnen-I with non-final capital** (e.g. `jedEn`, `jedEr`): these forms embed the capital letter at a non-final position; detection requires morphological analysis beyond simple pattern matching and is not currently supported.
 - **Gendered adjectives** (e.g. `begeisterte*n`): not yet annotated (occur in ~5 % of gendered NP elements per Ochs 2026, §7.3.2).
 - **Inflected case suffixes** on gendered nouns (e.g. genitive `Lehrers*in`, dative plural extra marking): rare and not detected.
-- **Completely novel neo-pronouns** (e.g. `dier`, `xier`) that do not follow a known pattern cannot be detected by regular expressions.
+- **Ambiguous neo-pronoun forms**: `dem`, `deren`, `denen` are excluded from the neo-pronoun lexicon as they are indistinguishable from standard German determiners/pronouns without syntactic context. `per` is included despite its use as a preposition.
 
 ## Usage
 
@@ -121,6 +170,6 @@
 
 ## References
 
-Ochs, S. & Rüdiger, J. O. (2025). Of stars and colons: A corpus-based analysis of gender-inclusive orthographies in German press texts. In D. Schmitz, S. D. Stein & V. Schneider (Eds.), *Linguistic Intersections of Language and Gender* (pp. 31–62). Düsseldorf: düsseldorf university press. https://doi.org/10.1515/9783111388694-003
+Ochs, Samira/Rüdiger, Jan Oliver (2025): Of stars and colons: A corpus-based analysis of gender-inclusive orthographies in German press texts. In: Schmitz, Dominic/Stein, Simon David/Schneider, Viktoria (eds.): Linguistic intersections of language and gender. Of gender bias and gender fairness. Berlin/Boston: De Gruyter, pp. 31–62. https://doi.org/10.1515/9783111388694.
 
-Ochs, S. (2026). Die morphosyntaktische Integration neuer Gendersuffixe: Eine korpusbasierte Analyse deutschsprachiger Pressetexte. *Gender Linguistics*, 2. https://doi.org/10.65020/0619d927
+Ochs, Samira (2026). Die morphosyntaktische Integration neuer Gendersuffixe: Eine korpusbasierte Analyse deutschsprachiger Pressetexte. *Gender Linguistics*, 2. https://doi.org/10.65020/0619d927
diff --git a/src/index.js b/src/index.js
index e2f22aa..38f21b5 100644
--- a/src/index.js
+++ b/src/index.js
@@ -68,6 +68,142 @@
 const neopronGenderStarPairRegex = /^(sie|er|ihr|ihn?|ihm?|dich|sich|mich|mir|uns|euch|ihnen|seinen?|ihrem?|deren?|denen)([*:_])(sie|er|ihr|ihn?|ihm?|dich|sich|mich|mir|uns|euch|ihnen|seinen?|ihrem?|deren?|denen)$/i;
 
 // ---------------------------------------------------------------------------
+// Neo-pronoun lexicon  (source: pronomen.net/beliebige:neopronomen)
+// Maps lowercased surface form → { lemma, upos, xpos, feats }.
+//
+// Lemma: nominative form as listed on pronomen.net.
+// UPOS:  PRON  |  XPOS: PPER  |  FEATS: Gender=NonBin|PronType=Prs
+//
+// Excluded (too ambiguous with standard German words):
+//   'dem'   – dative definite article / demonstrative pronoun
+//   'deren' – relative/demonstrative genitive pronoun
+//   'denen' – relative/demonstrative dative pronoun
+//   'per'   – common German preposition
+//   'pers'  – excluded together with 'per'
+//
+// Shared/ambiguous oblique forms:
+//   'sier','siem','sien' – NOM/DAT/ACC of sier-paradigm; also GEN/DAT/ACC of
+//                          et/siem-paradigm (both annotated with lemma 'sier')
+//   'em'   – NOM of em/em-paradigm; also DAT of el/em and en/em
+//   'ems'  – GEN of both el/em and em/em (annotated as lemma 'em')
+//   'en'   – NOM/ACC/DAT of en/en; NOM/ACC of en/em (lemma 'en')
+//   'ens'  – GEN of en/em; also all forms of ens/ens (lemma 'ens')
+// ---------------------------------------------------------------------------
+
+function neoPron(lemma) {
+  return { lemma, upos: 'PRON', xpos: 'PPER', feats: 'Gender=NonBin|PronType=Prs' };
+}
+
+const NEO_PRONOUN_FORMS = new Map([
+  // ---- Verschmelzung (blend pronouns) ------------------------------------
+  // sier/siem  (NOM=sier, GEN=sies, DAT=siem, ACC=sien)
+  ['sier',    neoPron('sier')],
+  ['sies',    neoPron('sier')],
+  ['siem',    neoPron('sier')],
+  ['sien',    neoPron('sier')],
+  // xier/xiem  (NOM=xier, GEN=xies, DAT=xiem, ACC=xien)
+  ['xier',    neoPron('xier')],
+  ['xies',    neoPron('xier')],
+  ['xiem',    neoPron('xier')],
+  ['xien',    neoPron('xier')],
+  // ersie/ihmihr  (NOM=ersie, GEN=seinihr, DAT=ihmihr, ACC=ihnsie)
+  ['ersie',   neoPron('ersie')],
+  ['seinihr', neoPron('ersie')],
+  ['ihmihr',  neoPron('ersie')],
+  ['ihnsie',  neoPron('ersie')],
+
+  // ---- They-ähnlich (they-like pronouns) ---------------------------------
+  // dej/denen/dej  (NOM=dej, GEN=deren, DAT=denen, ACC=dej)
+  // 'deren' and 'denen' omitted (overlap with standard German pronouns)
+  ['dej',     neoPron('dej')],
+  // dey/denen/dem and dey/denen/demm  (NOM=dey; 'dem' excluded)
+  ['dey',     neoPron('dey')],
+  ['demm',    neoPron('dey')],   // ACC of dey/denen/demm
+  // ey/emm  (NOM=ey, GEN=eys, DAT=emm, ACC=emm)
+  ['ey',      neoPron('ey')],
+  ['eys',     neoPron('ey')],
+  ['emm',     neoPron('ey')],
+  // they/them  (NOM=they, GEN=their, DAT=them, ACC=them)
+  ['they',    neoPron('they')],
+  ['their',   neoPron('they')],
+  ['them',    neoPron('they')],
+
+  // ---- Neuer Stamm (new-stem pronouns) -----------------------------------
+  // el/em  (NOM=el, GEN=ems, DAT=em, ACC=en)
+  // 'ems' mapped to 'em'-paradigm below; 'em'/'en' mapped to their own NOM paradigms
+  ['el',      neoPron('el')],
+  // em/em  (NOM=em, GEN=ems, DAT=em, ACC=em)
+  ['em',      neoPron('em')],
+  ['ems',     neoPron('em')],   // GEN shared with el/em paradigm
+  // en/en  (NOM=en, GEN=enses, DAT=en, ACC=en)
+  // en/em  (NOM=en, GEN=ens, DAT=em, ACC=en)  — DAT 'em' mapped to em-paradigm
+  ['en',      neoPron('en')],
+  ['enses',   neoPron('en')],
+  // ens/ens  (NOM=ens, GEN=ens, DAT=ens, ACC=ens)
+  // 'ens' takes priority as NOM of ens-paradigm (also GEN of en/em)
+  ['ens',     neoPron('ens')],
+  // et/siem  (NOM=et, GEN=sier, DAT=siem, ACC=sien)
+  // oblique forms 'sier'/'siem'/'sien' already mapped to sier-paradigm above
+  ['et',      neoPron('et')],
+  // ex/ex  (all forms = ex)
+  ['ex',      neoPron('ex')],
+  // hän/sim  (NOM=hän, GEN=sir, DAT=sim, ACC=sin)
+  ['hän',     neoPron('hän')],
+  ['sir',     neoPron('hän')],
+  ['sim',     neoPron('hän')],
+  ['sin',     neoPron('hän')],
+  // hen/hem  (NOM=hen, GEN=hens, DAT=hem, ACC=hen)
+  ['hen',     neoPron('hen')],
+  ['hens',    neoPron('hen')],
+  ['hem',     neoPron('hen')],
+  // hie/hiem  (NOM=hie, GEN=hein, DAT=hiem, ACC=hie)
+  ['hie',     neoPron('hie')],
+  ['hein',    neoPron('hie')],
+  ['hiem',    neoPron('hie')],
+  // iks/iks  (NOM=iks, GEN=ikses, DAT=iks, ACC=iks)
+  ['iks',     neoPron('iks')],
+  ['ikses',   neoPron('iks')],
+  // ind/inde  (NOM=ind, GEN=inds, DAT=inde, ACC=ind)
+  ['ind',     neoPron('ind')],
+  ['inds',    neoPron('ind')],
+  ['inde',    neoPron('ind')],
+  // mensch/mensch  (NOM=mensch, GEN=menschs, DAT=mensch, ACC=mensch)
+  // Note: case-insensitive match means sentence-initial 'Mensch' (common noun)
+  // will also be tagged; acceptable in a gender-language–focused tagger.
+  ['mensch',  neoPron('mensch')],
+  ['menschs', neoPron('mensch')],
+  // nin/nim  (NOM=nin, GEN=nims, DAT=nim, ACC=nin)
+  ['nin',     neoPron('nin')],
+  ['nims',    neoPron('nin')],
+  ['nim',     neoPron('nin')],
+  // oj/ojm  (NOM=oj, GEN=juj, DAT=ojm, ACC=ojn)
+  ['oj',      neoPron('oj')],
+  ['juj',     neoPron('oj')],
+  ['ojm',     neoPron('oj')],
+  ['ojn',     neoPron('oj')],
+  // per/per  (all forms = per; GEN = pers)
+  // Note: 'per' also occurs as a German preposition (e.g. 'per E-Mail').
+  ['per',     neoPron('per')],
+  ['pers',    neoPron('per')],
+  // ser/sem  (NOM=ser, GEN=ses, DAT=sem, ACC=sen)
+  ['ser',     neoPron('ser')],
+  ['ses',     neoPron('ser')],
+  ['sem',     neoPron('ser')],
+  ['sen',     neoPron('ser')],
+  // Y/Y  (all forms = Y; GEN = Ys) — stored lowercase; lemma retains uppercase 'Y'
+  ['y',       neoPron('Y')],
+  ['ys',      neoPron('Y')],
+  // zet/zerm  (NOM=zet, GEN=zets, DAT=zerm, ACC=zern)
+  ['zet',     neoPron('zet')],
+  ['zets',    neoPron('zet')],
+  ['zerm',    neoPron('zet')],
+  ['zern',    neoPron('zet')],
+  // */*  (Stern; all forms = *; GEN = *s)
+  ['*',       neoPron('*')],
+  ['*s',      neoPron('*')],
+]);
+
+// ---------------------------------------------------------------------------
 // Helpers
 // ---------------------------------------------------------------------------
 
@@ -205,6 +341,12 @@
   let m;
 
   // ------------------------------------------------------------------
+  // 0. Neo-pronoun lexicon lookup (case-insensitive, exact form match)
+  // ------------------------------------------------------------------
+  const entry = NEO_PRONOUN_FORMS.get(word.toLowerCase());
+  if (entry) return entry;
+
+  // ------------------------------------------------------------------
   // 1. Gender-sensitive NOUNS
   // ------------------------------------------------------------------
 
diff --git a/test/data/gender.conllu b/test/data/gender.conllu
index bc3c76c..9319d7c 100644
--- a/test/data/gender.conllu
+++ b/test/data/gender.conllu
@@ -115,3 +115,26 @@
 3	Spieler/-innen	_	_	_	_	_	_	_	_
 4	lasen	_	VERB	VVFIN	_	_	_	_	_
 
+# foundry = base
+# filename = TEST/gender/000011/base/tokens.xml
+# text_id = GENDER_TEST.000011
+# text = sier trifft xier jeden Tag
+1	sier	_	_	_	_	_	_	_	_
+2	trifft	_	VERB	VVFIN	_	_	_	_	_
+3	xier	_	_	_	_	_	_	_	_
+4	jeden	_	DET	PIAT	_	_	_	_	_
+5	Tag	_	NOUN	NN	_	_	_	_	_
+
+# foundry = base
+# filename = TEST/gender/000012/base/tokens.xml
+# text_id = GENDER_TEST.000012
+# text = oj dankte el und hen für die Hilfe
+1	oj	_	_	_	_	_	_	_	_
+2	dankte	_	VERB	VVFIN	_	_	_	_	_
+3	el	_	_	_	_	_	_	_	_
+4	und	_	CCONJ	KON	_	_	_	_	_
+5	hen	_	_	_	_	_	_	_	_
+6	für	_	ADP	APPR	_	_	_	_	_
+7	die	_	DET	ART	_	_	_	_	_
+8	Hilfe	_	NOUN	NN	_	_	_	_	_
+
diff --git a/test/test.js b/test/test.js
index 6367049..94391a3 100644
--- a/test/test.js
+++ b/test/test.js
@@ -91,11 +91,26 @@
     expect(stdout).toContain('sie*er\tsie*er\tPRON\tPPER\tGender=NonBin');
   });
 
+  test('Full mode: neo-pronoun lexicon forms (PRON PPER Gender=NonBin|PronType=Prs)', () => {
+    const command = 'node src/index.js < test/data/gender.conllu';
+    const stdout = execSync(command).toString();
+    // sier: NOM of sier-paradigm
+    expect(stdout).toContain('sier\tsier\tPRON\tPPER\tGender=NonBin|PronType=Prs');
+    // xier: NOM of xier-paradigm
+    expect(stdout).toContain('xier\txier\tPRON\tPPER\tGender=NonBin|PronType=Prs');
+    // oj: NOM of oj-paradigm
+    expect(stdout).toContain('oj\toj\tPRON\tPPER\tGender=NonBin|PronType=Prs');
+    // el: NOM of el-paradigm
+    expect(stdout).toContain('el\tel\tPRON\tPPER\tGender=NonBin|PronType=Prs');
+    // hen: NOM of hen-paradigm
+    expect(stdout).toContain('hen\then\tPRON\tPPER\tGender=NonBin|PronType=Prs');
+  });
+
   test('Full mode: foundry comment changed to gender', () => {
     const command = 'node src/index.js < test/data/gender.conllu';
     const stdout = execSync(command).toString();
     const foundry_count = (stdout.match(/# foundry = gender/g) || []).length;
-    expect(foundry_count).toBe(10);
+    expect(foundry_count).toBe(12);
   });
 
   test('Full mode: non-gender tokens pass through unchanged', () => {
@@ -120,16 +135,16 @@
       const featsAnnotated  = cols[5] !== '_';
       expect(lemmaAnnotated || featsAnnotated).toBe(true);
     });
-    // Count: 18 NOUN + 5 DET + 1 PRON = 24 annotated tokens
-    expect(tokenLines.length).toBe(24);
+    // Count: 18 NOUN + 5 DET + 1 PRON (sie*er) + 5 neo-pronouns (sier,xier,oj,el,hen) = 29
+    expect(tokenLines.length).toBe(29);
   });
 
   test('Sparse mode: sentence headers are emitted for sentences with matches', () => {
     const command = 'node src/index.js -s < test/data/gender.conllu';
     const stdout = execSync(command).toString();
-    // All 10 test sentences have at least one gender form
+    // All 12 test sentences have at least one gender form
     const text_id_count = (stdout.match(/# text_id = /g) || []).length;
-    expect(text_id_count).toBe(10);
+    expect(text_id_count).toBe(12);
   });
 
   test('Inline input: basic Genderstern annotation', () => {
