diff --git a/vrt2tei.pl b/vrt2tei.pl
index 67227d2..dd1cffa 100755
--- a/vrt2tei.pl
+++ b/vrt2tei.pl
@@ -18,7 +18,7 @@
 # TODO: 
 # 1  insert dtd spec, or ref to TEI
 
-# 3a UPLOAD in GITHUB
+# 3a remove the vrt positional attribute comment line / all comment lines
 # 3b add @head and @deprel to I5 sowie auch @msd
 # 3c bearbeitung von @head und @deprel in tei2korapxml durch Nils?
 # 3d build 30 billion corpus
@@ -28,7 +28,6 @@
 # 5 abfangen von unerwarteten elementen dh andere als <sentence> und <paragraph>
 # 5a wort reihenfolge nochmal checken
 # 6 checks and balances
-# 6a output nach stdout machen
 # 7  How to encode Kielipankki and National Library of Finland? in teiCorpus Header
 # 8  construct <idsDoc>s for the months (or go for TEI)
 # 9  parallelisation in bash and application on sub corpora of KLK
@@ -64,6 +63,8 @@
 use Time::Piece;
 use Tie::IxHash;
 
+
+
 #----------------------
 # check file arguments:
 #----------------------
@@ -83,30 +84,75 @@
 my $textcounter = 0;
 
 
+
+my $twig="";   
+my $teiCorpusHeaderDoc="";
+
+
+#------------------------------------------------------------------
+# read corpusHeaderSkeleton document and get header out of it
+#------------------------------------------------------------------
+
+my $teiCorpusHeaderDocTwig = new XML::Twig(
+    keep_spaces => 1,
+    keep_atts_order => 1,
+    comments => 'drop',
+    );
+
+
+$teiCorpusHeaderDocTwig->parsefile("teiCorpusHeaderSkeleton.tei.xml");
+my $corpusHeader = $teiCorpusHeaderDocTwig->root;                  # getting the teiHeader for corpus out of the teiCorpusHeaderSkeleton document
+
+
+#------------------------------------------------------------------
+# read textHeaderSkeleton document adn get header out of it
+#------------------------------------------------------------------
+
+my $teiTextHeaderDocTwig = new XML::Twig(
+    keep_spaces => 1,
+    keep_atts_order => 1,
+    comments => 'drop',
+    );
+
+$teiTextHeaderDocTwig->parsefile("teiTextHeaderSkeleton.tei.xml");
+my $textHeader = $teiTextHeaderDocTwig->root;                      # getting the teiHeader for corpus out of the teiTextHeaderSkeleton document
+
+
+#----------------------------------
+# read input VRT-XML document
+#----------------------------------
+
+open(my $IN,  "< $ARGV[0]") || die("$0: cannot open file for reading: $ARGV[0]");     # open input  file and initialise filehandel, actually does not seem to be needed
+                                                                                      # as parsefile() (s.b.) is applied to the filename
+
+#-----------------------------------------------------
+# global variables pertaining to the original corpus 
+#-----------------------------------------------------
+
+my $kielipankkiCorpus = "klk-fi-v2-vrt";
+
+
+
+
 #####################
 #     M A I N  
 #####################
 
-open(my $IN,  "< $ARGV[0]") || die("$0: cannot open file for reading: $ARGV[0]");     # open input  file and initialise filehandel, actually does not seem to be needed
-                                                                                      # as parsefile() (s.b.) is applied to the filename
-## open(my $OUT, "> $ARGV[1]") || die("$0: cannot open file: $ARGV[1]");              # open result file and initialise filehandle
-                                                                                      # currently not used but flushed to "/dev/stdout"
+#-------------------------------------------------------------------------------------------------------------
+# start twig for input and call start tag handler for root and twig handler for each <text> in the VRT
+#-------------------------------------------------------------------------------------------------------------
 
-#-----------------------------------------------------------------------------------
-# start twig and call start tag handler for root and twig handler for each <text>
-#-----------------------------------------------------------------------------------
-
-my $twig="";   
 
 $twig = new XML::Twig(
     keep_spaces => 1,           # dadurch auch whitespaces an ehemeligen elementgrenzen im output
     keep_atts_order => 1,       # requires Tie::IxHash
-    pretty_print => 'indented',
+    comments => 'drop',
     start_tag_handlers => {
-    	texts => \&root
+	texts => sub{root(@_, $corpusHeader)}
     },
     twig_handlers =>  {
-	text => \&text
+#	text => \&text
+	text =>  sub{text(@_, $textHeader)}
     },
     # dtd_handlers =>   {       # ToDo for I5
     #	\&set_dtd;
@@ -117,7 +163,8 @@
 
 $twig->parsefile($ARGV[0]);
 
-##TMP close($OUT);
+
+
 
 
 ###########
@@ -141,53 +188,54 @@
 
 
 sub root {
-    my ($twig, $root) =@_;
+    my ($twig, $root, $corpusHeader) =@_;
 
     $root->set_gi('teiCorpus');
     $root->set_att("xmlns", 'http://www.tei-c.org/ns/1.0');
 
-    &insertCorpusHeader($root);
+    &insertCorpusHeader($root, $corpusHeader);
 }
 
 
+
 sub insertCorpusHeader{
-    my ($root) =@_;
+    my ($root, $corpusHeader) =@_;
 
+    #---------------------------------------------------------------------------
+    # get some metadata for the current output corpus based on source and year
+    #---------------------------------------------------------------------------
+    
     my @array = split(/\//, $ARGV[0]);
     my $l = scalar(@array);
     my $source = $array[$l-1];
-    $source =~ s/\.xml//;
-    $source = $source . " from klk-fi-v2-vrt";       # for the time being; TODO
-    
-    my $teiHeader        = $root           ->insert_new_elt("first_child", 'teiHeader');    
-    my $fileDesc         = $teiHeader      ->insert_new_elt("last_child", 'fileDesc');
-    my $profileDesc      = $teiHeader      ->insert_new_elt("last_child", 'profileDesc');
-    
-    my $titleStmt        = $fileDesc       ->insert_new_elt("last_child", 'titleStmt');
-    my $title            = $titleStmt      ->insert_new_elt("last_child", 'title');
-    $title               ->set_text($source . " from KLK-fi-2021 for EuReCo");
-    
-    my $publicationStmt  = $fileDesc       ->insert_new_elt("last_child", 'publicationStmt');
-    my $distributor      = $publicationStmt->insert_new_elt("last_child", 'distributor');
-    $distributor         ->set_text("NOT FOR DISTRIBUTION - to be used locally in EuReCo");
+    $source =~ s/([0-9][0-9][0-9][0-9])\.xml$//;
 
-    my $sourceDesc       = $fileDesc       ->insert_new_elt("last_child", 'sourceDesc');
-    my $bibl             = $sourceDesc     ->insert_new_elt("last_child", 'bibl');
-    $bibl                ->set_text($source);
+    my $language="Finnish";
+    my $lang_tla="fi";
+    
+    my $yy = $1;   # $1 now containts substring in first bracket in regex above
 
-    my $langUsage        = $profileDesc    ->insert_new_elt("last_child", 'langUsage');
-    my $language         = $langUsage      ->insert_new_elt("last_child", 'language');
-    $language            ->set_att("ident",'fi');
-    $language            ->set_text("Finnish");
+    my $ctitle = $source . " " . $yy . ", from ". $kielipankkiCorpus . " for EuReCo";    # to do: also get name of corpus (klk-fi-v2-vrt)
+
+
+    #-----------------------
+    # set corpus header
+    #-----------------------
+    
+    &set_title(     $corpusHeader, $source, $yy, $kielipankkiCorpus);
+    &set_sourceDesc($corpusHeader, $source, $yy, $kielipankkiCorpus);
+
+    my $teiCorpusHeader        = $corpusHeader->paste("first_child", $root);
+
 }
     
-    
+
 #----------------------------
 # handler &text for <text>
 #----------------------------
 
 sub text {
-    my ($twig, $text) = @_;
+    my ($twig, $text, $textHeader) = @_;
 
     $textcounter++;               # global variable
 
@@ -199,7 +247,8 @@
     
     my $textattsref = $text->atts();               # $textattsref is now a reference to a hash and should be used with '->'
 
-    &createTextHeader($text, $textattsref);
+
+    &createTextHeader($text, $textattsref, $textHeader);
 
     #--------------------------
     # create <TEI> from <text>
@@ -266,13 +315,13 @@
 	} # end sentences
     } # end paragraphs
 
-    $twig->set_pretty_print( 'record');
+    # $twig->set_pretty_print( 'record');
     # $twig->flush($OUT);
     $twig->flush("/dev/stdout");
 }
 
 sub createTextHeader{
-    my ($text, $textattsref) = @_;
+    my ($text, $textattsref, $textHeader) = @_;
     
     # USE 01 binding_id="2246025"
     # USE 02 date="2021-01-15"
@@ -332,140 +381,208 @@
     my @namearray = split(/[\.\/]/, $ORIGFILENAME);  # use $namearray[4] as ID for the page
     
 
+
     #-----------------------------------------------------------------------
-    # CREATE text-teiHeader ACCORDING TO THE SKELETON in klk-header.tei.xml
+    # CREATE text-teiHeader ACCORDING TO THE SKELETON in $textHeader
     #-----------------------------------------------------------------------
 
-    # create <teiHeader> inside <TEI>
-    my $teiHeader = XML::Twig::Elt->new('teiHeader');
-    $teiHeader->paste('first_child', $text);
 
-    ## insert_new_elt is a combo of new and paste, cf. xml::twig docu:
-    ## insert_new_elt ($opt_position, $gi, $opt_atts_hashref, @opt_content)
+    $textHeader->paste('first_child', $text);
+
+    #-----------------------------------------------
+    # <teiHeader>
+    #   <fileDesc n="[EuReCo-KLK-FIN_$ID]">
+    #     <titleStmt>
+    #       <title>[$LABEL, page $PAGENO]</title>	
+
+    $textHeader->first_child("fileDesc")->first_child("titleStmt")->first_child("title")
+	->set_text($LABEL . ", Text #" . $textcounter);    # Case KLK
+
+    #-----------------------------------------------
+    # <fileDesc>
+    #  <sourceDesc>
+    #   <biblStruct>
+    #      <analytic>
+    #         <title type="main">[$LABEL, page $PAGENO]</title>
+    #         <date>[$DATE]</date>
+    #         <date type="year">TODO</date>
+    #         <date type="month">TODO</date>
+    #         <date type="day">TODO</date>
+    #         <idno type="PAGEID">$PAGEID</idno>
+    #         <idno type="BINDINGID">$BID</idno>
+    #         <idno type="ID">$ID</idno>
+    #         <idno type="KIELIPANKKI_METAFILENAME">$METAFILENAME</idno>
+    #         <idno type="KIELIPANKKI_ORIGFILENAME">$ORIGFILENAME</idno>
+    #         <textLang>$LANGUAGE</textLang>
+    #       </analytic>
+
+    my $analytic  = $textHeader->get_xpath("./fileDesc/sourceDesc/biblStruct/analytic", 0);
+
+    $analytic->first_child("title")                    ->set_text($LABEL . ", Text #" . $textcounter);   # Case KLK
+    $analytic->get_xpath('./date[@type="year"]',   0)  ->set_text($datearray[0]);
+    $analytic->get_xpath('./date[@type="month"]',  0)  ->set_text($datearray[1]);
+    $analytic->get_xpath('./date[@type="day"]',    0)  ->set_text($datearray[2]);    
+    $analytic->get_xpath('./idno[@type="PAGEID"]',       0)     ->set_text($PAGEID);
+    $analytic->get_xpath('./idno[@type="BINDINGID"]',    0)     ->set_text($BID);
+    $analytic->get_xpath('./idno[@type="ID"]',           0)     ->set_text($ID);
+    $analytic->get_xpath('./idno[@type="KIELIPANKKI_METAFILENAME"]', 0)     ->set_text($METAFILENAME);
+    $analytic->get_xpath('./idno[@type="KIELIPANKKI_ORIGFILENAME"]', 0)     ->set_text($ORIGFILENAME);
+    $analytic->first_child('textLang')                        ->set_text($LANGUAGE);
     
-    my $fileDesc     = $teiHeader->insert_new_elt('fileDesc'                           => {n => "EuReCo_KLK-fi_" . $namearray[4]});
-    my $encodingDesc = $teiHeader->insert_new_elt("last_child", 'encodingDesc');
-    my $profileDesc  = $teiHeader->insert_new_elt("last_child", 'profileDesc');
-    my $revisionDesc = $teiHeader->insert_new_elt("last_child", 'revisionDesc');
+    #  <monogr>
+    #    <title>$PUBLTITLE</title>
+    #    <imprint>
+    #      <pubPlace>TODO</pubPlace>
+    #        <publisher>TODO</publisher>
+    #    </imprint>
+    #    <biblScope unit="ISSUETITLE"/>
+    #    <biblScope unit="ISSUENO"/>
+    #    <biblScope unit="ISSUEDATE"/>
+    #    <biblScope unit="pp">$PAGENO</biblScope>
+    #  <monogr>
 
-    #---------------------
-    # fileDesc/titleStmt
-    #---------------------
-    my $titleStmt = $fileDesc ->insert_new_elt('titleStmt');
-    my $title     = $titleStmt->insert_new_elt("last_child", 'title');
-    my $respStmt  = $titleStmt->insert_new_elt("last_child", 'respStmt');
-    my $resp      = $respStmt ->insert_new_elt("last_child", 'resp');
-    my $name      = $respStmt ->insert_new_elt("last_child", 'name');
+    my $monogr  = $textHeader->get_xpath("./fileDesc/sourceDesc/biblStruct/monogr", 0);
 
-    # set texts for titleStmt
-    # $title->set_text($LABEL . ", page " . $PAGENO);           # Achtung - PAGENO scheint meist "None" zu sein
-    $title->set_text($LABEL . ", Text #" . $textcounter);    # at least for Suomen Kuvalehti
-    $resp ->set_text("compiled by EuReCo");
-    $name ->set_text("EuReCo: HL");
 
-    #--------------------------
-    # fileDesc/publicationStmt
-    #--------------------------
-    my $publicationStmt = $fileDesc       ->insert_new_elt("last_child", 'publicationStmt');
-    my $distributor     = $publicationStmt->insert_new_elt("last_child", 'distributor');
-    my $note            = $distributor    ->insert_new_elt("last_child", 'note');
-    my $availability    = $publicationStmt->insert_new_elt("last_child", 'availability'); 
-    my $licence         = $availability   ->insert_new_elt("last_child", 'licence');
 
-    # set texts for publicationStmt
-    $note   ->set_text("NOT FOR DISTRIBUTION - to be used locally in EuReCo");
-    $licence->set_text("CLARIN-RES");  # TODO: Ausfuherlichere Licence info in KLK Metadata Record
 
-    #------------------------------
-    # fileDesc/sourceDesc/biblStruct
-    #------------------------------
-    my $sourceDesc = $fileDesc  ->insert_new_elt("last_child", 'sourceDesc');
-    my $biblStruct   = $sourceDesc->insert_new_elt("last_child", 'biblStruct');
-
-    # fileDesc/sourceDesc/biblStruct/analytic
-    my $analytic                = $biblStruct->insert_new_elt("last_child", 'analytic');
-    my $analytic_title          = $analytic->insert_new_elt("last_child", 'title'        => {type => "main"} );
-#    my $analytic_date           = $analytic->insert_new_elt("last_child", 'date');
-    my $analytic_date_year      = $analytic->insert_new_elt("last_child", 'date'         => {type => "year"});
-    my $analytic_date_month     = $analytic->insert_new_elt("last_child", 'date'         => {type => "month"});
-    my $analytic_date_day       = $analytic->insert_new_elt("last_child", 'date'         => {type => "day"});
-    my $analytic_idno_pageid    = $analytic->insert_new_elt("last_child", 'idno'         => {type => "PAGEID"});
-    my $analytic_idno_bindingid = $analytic->insert_new_elt("last_child", 'idno'         => {type => "BINDINGID"});
-    my $analytic_idno_id        = $analytic->insert_new_elt("last_child", 'idno'         => {type => "ID"});
-    my $analytic_idno_metafile  = $analytic->insert_new_elt("last_child", 'idno'         => {type => "KIELIPANKKI_METAFILENAME"});
-    my $analytic_idno_origfile  = $analytic->insert_new_elt("last_child", 'idno'         => {type => "KIELIPANKKI_ORIGFILENAME"});
-    my $analytic_textlang       = $analytic->insert_new_elt("last_child", 'textLang');
-
-    # set texts for analytic
-#    $analytic_title         ->set_text($LABEL . ", page " . $PAGENO);  # Achtung $PAGENO scheint meist "None zu sein"
-    $analytic_title         ->set_text($LABEL . ", Text #" . $textcounter);  # Achtung $PAGENO scheint meist "None zu sein"
-#    $analytic_date         ->set_text($DATE);
-    $analytic_date_year     ->set_text($datearray[0]);
-    $analytic_date_month    ->set_text($datearray[1]);
-    $analytic_date_day      ->set_text($datearray[2]);
-    $analytic_idno_pageid   ->set_text($PAGEID);
-    $analytic_idno_bindingid->set_text($BID);
-    $analytic_idno_id       ->set_text($ID);
-    $analytic_idno_metafile ->set_text($METAFILENAME);
-    $analytic_idno_origfile ->set_text($ORIGFILENAME);
-    $analytic_textlang      ->set_text($LANGUAGE);
-
-    #-------------------------------------    
-    # fileDesc/sourceDesc/biblStruct/monogr
-    #-------------------------------------
-    my $monogr               = $biblStruct->insert_new_elt("last_child", 'monogr');
-    my $monogr_title         = $monogr    ->insert_new_elt("last_child", 'title');
-    my $imprint              = $monogr    ->insert_new_elt("last_child", 'imprint');   # imprint is needed for valididty
-    my $pubPlace             = $imprint   ->insert_new_elt("last_child", 'pubPlace');  # imprint is needed for validity
-    my $publisher            = $imprint   ->insert_new_elt("last_child", 'publisher'); # imprint is needed for validity
-    my $biblScope_issuetitle = $monogr    ->insert_new_elt("last_child", 'biblScope'   => {unit => 'ISSUETITLE'} );
-    my $biblScope_issueno    = $monogr    ->insert_new_elt("last_child", 'biblScope'   => {unit => 'ISSUENO'} );
-    my $biblScope_issuedate  = $monogr    ->insert_new_elt("last_child", 'biblScope'   => {unit => 'ISSUEDATE'} );
-    my $biblScope_pp         = $monogr    ->insert_new_elt("last_child", 'biblScope'   => {unit => 'PAGENO'} );      # Achtung PAGENO ist meist "None" ?
-
-    # set texts for monogr
-    $monogr_title        ->set_text($PUBLTITLE);
-    $pubPlace            ->set_text("TODO");
-    $pubPlace            ->set_att("key",'FI');
-    $publisher           ->set_text("TODO");
-    $biblScope_issuetitle->set_text($ISSUETITLE);
-    $biblScope_issueno   ->set_text($ISSUENO);
-    $biblScope_issuedate ->set_text($ISSUEDATE);
-    $biblScope_pp        ->set_text($PAGENO);
- 
-    #---------------
-    # encodingDesc
-    #---------------
-    my $tagsDecl     = $encodingDesc->insert_new_elt("last_child", 'tagsDecl');
-    my $namespace    = $tagsDecl    ->insert_new_elt("last_child", 'namespace'    => {name => 'http://www.tei-c.org/ns/1.0'});
-    my $tagUsage_s   = $namespace   ->insert_new_elt("last_child", 'tagUsage'     => {gi   => 's', occurs => $SENTCOUNT});
-    my $tagUsage_w   = $namespace   ->insert_new_elt("last_child", 'tagUsage'     => {gi   => 'w', occurs => $TOKENCOUNT});
     
-    #-------------
-    # profileDesc
-    #-------------
-    my $langUsage   = $profileDesc ->insert_new_elt("last_child", 'langUsage');
-    my $language    = $langUsage   ->insert_new_elt("last_child", 'language'      => {ident => $LANGUAGE, usage => $SUMLANG});
-    # Achtung in @usage muss eigt. ein integer; am besten inhalt von SUMLANG aufdroeseln und mehrere <language> machen
-    my $textClass   = $profileDesc ->insert_new_elt("last_child", 'textClass');
-    my $classCode_fi   = $textClass   ->insert_new_elt("last_child", 'classCode' => {scheme       => "KLK_PUBLTYPE"});
-#    my $classCode_en   = $textClass   ->insert_new_elt("last_child", 'classCode' => {scheme      => "KLK_PUBLTYPE_MAPPED"});
+##TMP      # create <teiHeader> inside <TEI>
+##TMP      my $teiHeader = XML::Twig::Elt->new('teiHeader');
+##TMP      # $teiHeader->paste('first_child', $text);
+##TMP  
+##TMP      ## insert_new_elt is a combo of new and paste, cf. xml::twig docu:
+##TMP      ## insert_new_elt ($opt_position, $gi, $opt_atts_hashref, @opt_content)
+##TMP      
+##TMP      my $fileDesc     = $teiHeader->insert_new_elt('fileDesc'                           => {n => "EuReCo_KLK-fi_" . $namearray[4]});
+##TMP      my $encodingDesc = $teiHeader->insert_new_elt("last_child", 'encodingDesc');
+##TMP      my $profileDesc  = $teiHeader->insert_new_elt("last_child", 'profileDesc');
+##TMP      my $revisionDesc = $teiHeader->insert_new_elt("last_child", 'revisionDesc');
+##TMP  
+##TMP      #---------------------
+##TMP      # fileDesc/titleStmt
+##TMP      #---------------------
+##TMP      my $titleStmt = $fileDesc ->insert_new_elt('titleStmt');
+##TMP      my $title     = $titleStmt->insert_new_elt("last_child", 'title');
+##TMP      my $respStmt  = $titleStmt->insert_new_elt("last_child", 'respStmt');
+##TMP      my $resp      = $respStmt ->insert_new_elt("last_child", 'resp');
+##TMP      my $name      = $respStmt ->insert_new_elt("last_child", 'name');
+##TMP  
+##TMP      # set texts for titleStmt
+##TMP      # $title->set_text($LABEL . ", page " . $PAGENO);           # Achtung - PAGENO scheint meist "None" zu sein
+##TMP      $title->set_text($LABEL . ", Text #" . $textcounter);    # at least for Suomen Kuvalehti
+##TMP      $resp ->set_text("compiled by EuReCo");
+##TMP      $name ->set_text("EuReCo: HL");
+##TMP  
+##TMP      #--------------------------
+##TMP      # fileDesc/publicationStmt
+##TMP      #--------------------------
+##TMP      my $publicationStmt = $fileDesc       ->insert_new_elt("last_child", 'publicationStmt');
+##TMP      my $distributor     = $publicationStmt->insert_new_elt("last_child", 'distributor');
+##TMP      my $note            = $distributor    ->insert_new_elt("last_child", 'note');
+##TMP      my $availability    = $publicationStmt->insert_new_elt("last_child", 'availability'); 
+##TMP      my $licence         = $availability   ->insert_new_elt("last_child", 'licence');
+##TMP  
+##TMP      # set texts for publicationStmt
+##TMP      $note   ->set_text("NOT FOR DISTRIBUTION - to be used locally in EuReCo");
+##TMP      $licence->set_text("CLARIN_RES");  # TODO: Ausfuherlichere Licence info in KLK Metadata Record
+##TMP  
+##TMP      #------------------------------
+##TMP      # fileDesc/sourceDesc/biblStruct
+##TMP      #------------------------------
+##TMP      my $sourceDesc = $fileDesc  ->insert_new_elt("last_child", 'sourceDesc');
+##TMP      my $biblStruct   = $sourceDesc->insert_new_elt("last_child", 'biblStruct');
+##TMP  
+##TMP      # fileDesc/sourceDesc/biblStruct/analytic
+##TMP      my $analytic                = $biblStruct->insert_new_elt("last_child", 'analytic');
+##TMP      my $analytic_title          = $analytic->insert_new_elt("last_child", 'title'        => {type => "main"} );
+##TMP  #    my $analytic_date           = $analytic->insert_new_elt("last_child", 'date');
+##TMP      my $analytic_date_year      = $analytic->insert_new_elt("last_child", 'date'         => {type => "year"});
+##TMP      my $analytic_date_month     = $analytic->insert_new_elt("last_child", 'date'         => {type => "month"});
+##TMP      my $analytic_date_day       = $analytic->insert_new_elt("last_child", 'date'         => {type => "day"});
+##TMP      my $analytic_idno_pageid    = $analytic->insert_new_elt("last_child", 'idno'         => {type => "PAGEID"});
+##TMP      my $analytic_idno_bindingid = $analytic->insert_new_elt("last_child", 'idno'         => {type => "BINDINGID"});
+##TMP      my $analytic_idno_id        = $analytic->insert_new_elt("last_child", 'idno'         => {type => "ID"});
+##TMP      my $analytic_idno_metafile  = $analytic->insert_new_elt("last_child", 'idno'         => {type => "KIELIPANKKI_METAFILENAME"});
+##TMP      my $analytic_idno_origfile  = $analytic->insert_new_elt("last_child", 'idno'         => {type => "KIELIPANKKI_ORIGFILENAME"});
+##TMP      my $analytic_textlang       = $analytic->insert_new_elt("last_child", 'textLang');
+##TMP  
+##TMP      # set texts for analytic
+##TMP  #    $analytic_title         ->set_text($LABEL . ", page " . $PAGENO);  # Achtung $PAGENO scheint meist "None zu sein"
+##TMP      $analytic_title         ->set_text($LABEL . ", Text #" . $textcounter);  # Achtung $PAGENO scheint meist "None zu sein"
+##TMP  #    $analytic_date         ->set_text($DATE);
+##TMP      $analytic_date_year     ->set_text($datearray[0]);
+##TMP      $analytic_date_month    ->set_text($datearray[1]);
+##TMP      $analytic_date_day      ->set_text($datearray[2]);
+##TMP      $analytic_idno_pageid   ->set_text($PAGEID);
+##TMP      $analytic_idno_bindingid->set_text($BID);
+##TMP      $analytic_idno_id       ->set_text($ID);
+##TMP      $analytic_idno_metafile ->set_text($METAFILENAME);
+##TMP      $analytic_idno_origfile ->set_text($ORIGFILENAME);
+##TMP      $analytic_textlang      ->set_text($LANGUAGE);
+##TMP  
+##TMP      #-------------------------------------    
+##TMP      # fileDesc/sourceDesc/biblStruct/monogr
+##TMP      #-------------------------------------
+##TMP      my $monogr               = $biblStruct->insert_new_elt("last_child", 'monogr');
+##TMP      my $monogr_title         = $monogr    ->insert_new_elt("last_child", 'title');
+##TMP      my $imprint              = $monogr    ->insert_new_elt("last_child", 'imprint');   # imprint is needed for valididty
+##TMP      my $pubPlace             = $imprint   ->insert_new_elt("last_child", 'pubPlace');  # imprint is needed for validity
+##TMP      my $publisher            = $imprint   ->insert_new_elt("last_child", 'publisher'); # imprint is needed for validity
+##TMP      my $biblScope_issuetitle = $monogr    ->insert_new_elt("last_child", 'biblScope'   => {unit => 'ISSUETITLE'} );
+##TMP      my $biblScope_issueno    = $monogr    ->insert_new_elt("last_child", 'biblScope'   => {unit => 'ISSUENO'} );
+##TMP      my $biblScope_issuedate  = $monogr    ->insert_new_elt("last_child", 'biblScope'   => {unit => 'ISSUEDATE'} );
+##TMP      my $biblScope_pp         = $monogr    ->insert_new_elt("last_child", 'biblScope'   => {unit => 'PAGENO'} );      # Achtung PAGENO ist meist "None" ?
+##TMP  
+##TMP      # set texts for monogr
+##TMP      $monogr_title        ->set_text($PUBLTITLE);
+##TMP      $pubPlace            ->set_text("TODO");
+##TMP      $pubPlace            ->set_att("key",'FI');
+##TMP      $publisher           ->set_text("TODO");
+##TMP      $biblScope_issuetitle->set_text($ISSUETITLE);
+##TMP      $biblScope_issueno   ->set_text($ISSUENO);
+##TMP      $biblScope_issuedate ->set_text($ISSUEDATE);
+##TMP      $biblScope_pp        ->set_text($PAGENO);
+##TMP   
+##TMP      #---------------
+##TMP      # encodingDesc
+##TMP      #---------------
+##TMP      my $tagsDecl     = $encodingDesc->insert_new_elt("last_child", 'tagsDecl');
+##TMP      my $namespace    = $tagsDecl    ->insert_new_elt("last_child", 'namespace'    => {name => 'http://www.tei-c.org/ns/1.0'});
+##TMP      my $tagUsage_s   = $namespace   ->insert_new_elt("last_child", 'tagUsage'     => {gi   => 's', occurs => $SENTCOUNT});
+##TMP      my $tagUsage_w   = $namespace   ->insert_new_elt("last_child", 'tagUsage'     => {gi   => 'w', occurs => $TOKENCOUNT});
+##TMP      
+##TMP      #-------------
+##TMP      # profileDesc
+##TMP      #-------------
+##TMP      my $langUsage   = $profileDesc ->insert_new_elt("last_child", 'langUsage');
+##TMP      my $language    = $langUsage   ->insert_new_elt("last_child", 'language'      => {ident => $LANGUAGE, usage => $SUMLANG});
+##TMP      # Achtung in @usage muss eigt. ein integer; am besten inhalt von SUMLANG aufdroeseln und mehrere <language> machen
+##TMP      my $textClass   = $profileDesc ->insert_new_elt("last_child", 'textClass');
+##TMP      my $classCode_fi   = $textClass   ->insert_new_elt("last_child", 'classCode' => {scheme       => "KLK_PUBLTYPE"});
+##TMP  #    my $classCode_en   = $textClass   ->insert_new_elt("last_child", 'classCode' => {scheme      => "KLK_PUBLTYPE_MAPPED"});
+##TMP  
+##TMP      #---------------------------
+##TMP      # set texts for profileDesc
+##TMP      #---------------------------
+##TMP      $classCode_fi ->set_text($PUBLTYPE);
+##TMP  #    $classCode_en->set_text($PUBLTYPETRANSL);
+##TMP  
+##TMP      #---------------
+##TMP      # revisionDesc
+##TMP      #---------------
+##TMP      my $change      = $revisionDesc ->insert_new_elt("last_child", 'change'       => {when => localtime->ymd('-'), who => 'HL'  });
+##TMP  
+##TMP      # set texts for revisionDesc
+##TMP      $change->set_text("TEI version for EuReCo");
 
-    #---------------------------
-    # set texts for profileDesc
-    #---------------------------
-    $classCode_fi ->set_text($PUBLTYPE);
-#    $classCode_en->set_text($PUBLTYPETRANSL);
 
-    #---------------
-    # revisionDesc
-    #---------------
-    my $change      = $revisionDesc ->insert_new_elt("last_child", 'change'       => {when => localtime->ymd('-'), who => 'HL'  });
 
-    # set texts for revisionDesc
-    $change->set_text("TEI version for EuReCo");
 
 
+
+    
+
     ###################################
     # END OF CREATING TEIHEADER
     ###################################
@@ -549,6 +666,53 @@
     
 }
     
+
+sub set_title{
+    my ($corpusHeader, $source, $yy, $kielipankkiCorpus) = @_;
+
+    my $cTitleString = $source . " " . $yy . ", from ". $kielipankkiCorpus . " for EuReCo";    
+
+    #<teiHeader>
+    #  <fileDesc>
+    #    <titleStmt>
+    #      <title>[Aamulehti2021] from [klk-fi-v2-vrt for] EuReCo</title>
+    #    </titleStmt>
+    #    <!-- ... -->
+    #  </fileDesc>
+    #</teiHeader>
+
+    my $cTitleNode = $corpusHeader->first_child("fileDesc")->first_child("titleStmt")->first_child("title");
+
+    $cTitleNode->set_text($cTitleString);
+    
+}
+
+sub set_sourceDesc{
+    my ($corpusHeader, $source, $yy, $kielipankkiCorpus) = @_;
+
+    my $cBiblString = $source . " " . $yy . ", from ". $kielipankkiCorpus . " for EuReCo";    
+
+    #<teiHeader>
+    #  <fileDesc>
+    #    <!-- ... -->
+    #    <sourceDesc>
+    #      <bibl>[Aamulehti2021] from [klk-fi-v2-vrt]</bibl>
+    #    </sourceDesc>
+    #    <!-- ... -->
+    #  </fileDesc>
+    #</teiHeader>
+
+    my $cBiblNode = $corpusHeader->first_child("fileDesc")->first_child("sourceDesc")->first_child("bibl");
+
+    $cBiblNode->set_text($cBiblString);    
+}
+
+
+
+
+
+
+
 #################
 ## usage_message
 #################
