diff --git a/Changes b/Changes
index b9f012d..284f068 100644
--- a/Changes
+++ b/Changes
@@ -4,6 +4,9 @@
               (implemented with AI assistance)
             - new option --text-sigle <template> to derive text sigle from newdoc id
               (implemented with AI assistance)
+            - Add --base-text option to generate data.xml with
+              reconstructed plain text from 'text' comment lines
+              (implemented with AI assistance)
 
 0.6.3 2024-06-04
         - Trim filenames to fix double space after filename metadata
diff --git a/script/conllu2korapxml b/script/conllu2korapxml
index b1ebfb5..c187918 100755
--- a/script/conllu2korapxml
+++ b/script/conllu2korapxml
@@ -25,6 +25,7 @@
 GetOptions(
     'force-foundry|f=s'            => \(my $foundry_name = ''),
     'text-sigle|s=s'               => \(my $text_sigle_template = ''),
+    'base-text'                    => \(my $base_text = 0),
     'log|l=s'                      => \(my $log_level = 'warn'),
     'output|o=s'                   => \(my $outh = '-'),
 
@@ -84,6 +85,8 @@
 my @dep_buffer;
 
 my ($write_morpho, $write_syntax, $base) = (1, 0, 0);
+# Sentence texts accumulated per document for data.xml generation
+my @doc_texts;
 my $filename;
 my $first=1;
 my @conllu_files = @ARGV;
@@ -121,6 +124,7 @@
         $doc_offset = 0;
         $sentence_text = '';
         $compute_offsets_mode = 0;
+        @doc_texts = ();
       } elsif (/^#\s*newdoc\s+id\s*=\s*(.*)/ && $text_sigle_template) {
         my $newdoc_id = $1;
         $newdoc_id =~ s/\s+$//;
@@ -203,8 +207,12 @@
       }  elsif (/^(?:#|0\.4)\s+(?:end_offsets|to)\s+[:=]\s*(.*)/) {
         @spansTo = split(/\s+/, $1);
       }  elsif (/^#\s*text\s*=\s*(.*)/) {
-        # Store sentence text for automatic offset computation
         $sentence_text = decode('UTF-8', $1);
+        if ($base_text) {
+          my $txt = $1;
+          $txt =~ s/\s+$//;
+          push @doc_texts, $txt;
+        }
       }
     } elsif ( !/^\s*$/ ) {
       # Pre-split columns before offset computation needs the raw form
@@ -362,6 +370,27 @@
     newZipStream($parser_file);
     $zip->print($parse, qq(</spanList>\n</layer>\n));
   }
+  # Write data.xml with reconstructed text when --base-text is set
+  if ($base_text && $filename && @doc_texts) {
+    my $text_dir = dirname($filename);
+    $text_dir =~ s@(.*)/[^/]+$@$1@;
+    my $data_path = "$text_dir/data.xml";
+    my $full_text = join(' ', @doc_texts);
+    $full_text =~ s/&/&amp;/g;
+    $full_text =~ s/</&lt;/g;
+    $full_text =~ s/>/&gt;/g;
+    newZipStream($data_path);
+    $zip->print(
+      qq(<?xml version="1.0" encoding="UTF-8"?>\n),
+      qq(<?xml-model href="text.rng" type="application/xml"),
+      qq( schematypens="http://relaxng.org/ns/structure/1.0"?>\n),
+      qq(<raw_text docid="$docid"),
+      qq( xmlns="http://ids-mannheim.de/ns/KorAP">\n),
+      qq(<text>$full_text</text>\n),
+      qq(</raw_text>\n)
+    );
+    @doc_texts = ();
+  }
 }
 
 sub layer_header {
@@ -410,6 +439,12 @@
 replaced by the document id to derive the KorAP-XML text sigle,
 filename, and docid.
 
+=item B<--base-text>
+
+Generate a C<data.xml> file containing the reconstructed plain text
+of each document. The text is built from C<# text> comment lines
+in the CoNLL-U input, joined by single spaces.
+
 =item B<--help|-h>
 
 Print help information.
diff --git a/t/ud_conllu.t b/t/ud_conllu.t
index 4e0a0a7..4e189c5 100644
--- a/t/ud_conllu.t
+++ b/t/ud_conllu.t
@@ -512,4 +512,194 @@
     "Rejects newdoc id with slash (expanded sigle has wrong part count)");
 like($err_slash, qr/ERROR/,
     "Error message for newdoc id containing slash");
+
+my $base_text_data = <<'CONLLU';
+# filename = TEST/TEST/TEST_BTX_001/base/tokens.xml
+# text_id = TEST_TEST.TEST_BTX_001
+# text = Geras rytas.
+# start_offsets = 0 0 6 11
+# end_offsets = 12 5 11 12
+1	Geras	geras	ADJ	bdv.	Case=Nom	2	amod	_	_
+2	rytas	rytas	NOUN	dkt.	Case=Nom	0	root	_	_
+3	.	.	PUNCT	skyr.	_	2	punct	_	SpaceAfter=No
+
+# text = Kaip sekasi?
+# start_offsets = 12 13 18 24
+# end_offsets = 25 17 24 25
+1	Kaip	kaip	ADV	prv.	_	2	advmod	_	_
+2	sekasi	sektis	VERB	vksm.	_	0	root	_	SpaceAfter=No
+3	?	?	PUNCT	skyr.	_	2	punct	_	_
+
+CONLLU
+
+my $btx_file = "$test_tempdir/test_base_text.conllu";
+{
+    open(my $bfh, '>:encoding(UTF-8)', $btx_file)
+        or die "Cannot write test file: $!";
+    print $bfh $base_text_data;
+    close($bfh);
+}
+
+# Run with --base-text to generate data.xml
+my $zipcontent_btx = '';
+script_runs(
+    [ 'script/conllu2korapxml', '-f', 'ud', '--base-text', $btx_file ],
+    { stdout => \$zipcontent_btx },
+    "conllu2korapxml accepts --base-text option"
+);
+
+my $zipfile_btx = "$test_tempdir/test_base_text.zip";
+if ($zipcontent_btx) {
+    open(my $zfh, '>:raw', $zipfile_btx) or die "Cannot write zip: $!";
+    print $zfh $zipcontent_btx;
+    close($zfh);
+
+    my $ziplist = `$UNZIP -l $zipfile_btx 2>/dev/null`;
+    like($ziplist,
+        qr@TEST/TEST/TEST_BTX_001/data\.xml@,
+        "Zip contains data.xml at correct path");
+
+    my $data_xml = `$UNZIP -p $zipfile_btx 'TEST/TEST/TEST_BTX_001/data.xml' 2>/dev/null`;
+
+    like($data_xml,
+        qr/docid="TEST_TEST\.TEST_BTX_001"/,
+        "data.xml has correct docid attribute");
+
+    like($data_xml,
+        qr/<raw_text\b/,
+        "data.xml contains <raw_text> element");
+
+    like($data_xml,
+        qr{<text>Geras rytas\. Kaip sekasi\?</text>},
+        "data.xml text is sentences joined by single space");
+
+    like($data_xml,
+        qr/xmlns="http:\/\/ids-mannheim\.de\/ns\/KorAP"/,
+        "data.xml has correct namespace");
+
+    like($data_xml,
+        qr/<\?xml-model href="text\.rng"/,
+        "data.xml has correct processing instruction");
+}
+else {
+    fail("Zip contains data.xml at correct path");
+    fail("data.xml has correct docid attribute");
+    fail("data.xml contains <raw_text> element");
+    fail("data.xml text is sentences joined by single space");
+    fail("data.xml has correct namespace");
+    fail("data.xml has correct processing instruction");
+}
+
+# Run WITHOUT --base-text to verify data.xml is NOT generated
+my $zipcontent_no_btx = '';
+script_runs(
+    [ 'script/conllu2korapxml', '-f', 'ud', $btx_file ],
+    { stdout => \$zipcontent_no_btx },
+    "conllu2korapxml runs without --base-text"
+);
+
+my $zipfile_no_btx = "$test_tempdir/test_no_base_text.zip";
+if ($zipcontent_no_btx) {
+    open(my $zfh, '>:raw', $zipfile_no_btx) or die "Cannot write zip: $!";
+    print $zfh $zipcontent_no_btx;
+    close($zfh);
+
+    my $ziplist_no = `$UNZIP -l $zipfile_no_btx 2>/dev/null`;
+    unlike($ziplist_no,
+        qr/data\.xml/,
+        "Zip does NOT contain data.xml when --base-text is omitted");
+}
+else {
+    fail("Zip does NOT contain data.xml when --base-text is omitted");
+}
+
+# Test XML escaping: text containing &, <, > characters
+my $escape_data = <<'CONLLU';
+# filename = TEST/TEST/TEST_ESC_001/base/tokens.xml
+# text_id = TEST_TEST.TEST_ESC_001
+# text = A & B < C > D
+# start_offsets = 0 0 2 4 6 8 10 12
+# end_offsets = 13 1 3 5 7 9 11 13
+1	A	a	NOUN	n.	_	0	root	_	_
+2	&	&	PUNCT	p.	_	1	punct	_	_
+3	B	b	NOUN	n.	_	1	conj	_	_
+4	<	<	PUNCT	p.	_	3	punct	_	_
+5	C	c	NOUN	n.	_	1	conj	_	_
+6	>	>	PUNCT	p.	_	5	punct	_	_
+7	D	d	NOUN	n.	_	1	conj	_	_
+
+CONLLU
+
+my $esc_file = "$test_tempdir/test_escape.conllu";
+{
+    open(my $efh, '>:encoding(UTF-8)', $esc_file)
+        or die "Cannot write test file: $!";
+    print $efh $escape_data;
+    close($efh);
+}
+
+my $zipcontent_esc = '';
+script_runs(
+    [ 'script/conllu2korapxml', '-f', 'ud', '--base-text', $esc_file ],
+    { stdout => \$zipcontent_esc },
+    "conllu2korapxml handles XML special chars in text"
+);
+
+my $zipfile_esc = "$test_tempdir/test_escape.zip";
+if ($zipcontent_esc) {
+    open(my $zfh, '>:raw', $zipfile_esc) or die "Cannot write zip: $!";
+    print $zfh $zipcontent_esc;
+    close($zfh);
+
+    my $data_esc = `$UNZIP -p $zipfile_esc 'TEST/TEST/TEST_ESC_001/data.xml' 2>/dev/null`;
+    like($data_esc,
+        qr{<text>A &amp; B &lt; C &gt; D</text>},
+        "data.xml escapes &, <, > in full text string");
+}
+else {
+    fail("data.xml escapes &, <, > in full text string");
+}
+
+# Test single-sentence document (no joining needed)
+my $single_sent_data = <<'CONLLU';
+# filename = TEST/TEST/TEST_SST_001/base/tokens.xml
+# text_id = TEST_TEST.TEST_SST_001
+# text = Hello world
+# start_offsets = 0 0 6
+# end_offsets = 11 5 11
+1	Hello	hello	INTJ	intj.	_	0	root	_	_
+2	world	world	NOUN	n.	_	1	flat	_	_
+
+CONLLU
+
+my $sst_file = "$test_tempdir/test_single_sent.conllu";
+{
+    open(my $sfh, '>:encoding(UTF-8)', $sst_file)
+        or die "Cannot write test file: $!";
+    print $sfh $single_sent_data;
+    close($sfh);
+}
+
+my $zipcontent_sst = '';
+script_runs(
+    [ 'script/conllu2korapxml', '-f', 'ud', '--base-text', $sst_file ],
+    { stdout => \$zipcontent_sst },
+    "conllu2korapxml generates data.xml for single-sentence document"
+);
+
+my $zipfile_sst = "$test_tempdir/test_single_sent.zip";
+if ($zipcontent_sst) {
+    open(my $zfh, '>:raw', $zipfile_sst) or die "Cannot write zip: $!";
+    print $zfh $zipcontent_sst;
+    close($zfh);
+
+    my $data_sst = `$UNZIP -p $zipfile_sst 'TEST/TEST/TEST_SST_001/data.xml' 2>/dev/null`;
+    like($data_sst,
+        qr{<text>Hello world</text>},
+        "data.xml single sentence: text matches exactly");
+}
+else {
+    fail("data.xml single sentence: text matches exactly");
+}
+
 done_testing;
