user4358: The amount of memory needed for my user interface is outrageous. Hence I decided to use flash memory. But after some successful readouts from program space, problems emerge. 
Updated:
I have some sort of initialisation files to collect all global arrays which go into flash like this: (intitialisation.cpp)
#ifndef INITIALISATIONDEF
#define INITIALISATIONDEF

#include "initialisation.h" //which includes Arduino libraries and "globals.h"


const uint8_t gl_PsNMenuType[MAXMENUS] PROGMEM = { 0, 0, 0, 0, 0};  // this is, what I intend to read out later. 
const uint8_t gl_PsNMenuParent[MAXMENUS] PROGMEM = { MAXMENUS, 0, 0, 0, 0};  
const uint8_t gl_PsNMenuFixTexts[MAXMENUS][MAXFIXTEXTSPM] PROGMEM = {  
  { 20, 2, MFTS, MFTS, MFTS}, // 0
  {2, 9, 1, MFTS, MFTS}, // 1
  {2, 10, MFTS, MFTS}, //2
  {2, 11, MFTS}, //3
  {2, 12, MFTS} //4

};
#endif

Updated:
while I propagate all global vars via another header (globals.h):
#ifndef GLOBALS
#define GLOBALS
#define SDTXT

#define MAXMENUS 80    
#define MAXFIXTEXTSPM 5  

#include "initialisation.h"
extern const uint8_t gl_PsNMenuType[MAXMENUS];
extern const uint8_t gl_PsNMenuParent[MAXMENUS];  // referenz auf den übergeordneten MP
extern const uint8_t gl_PsNMenuFixTexts[MAXMENUS][MAXFIXTEXTSPM];  // Liste der festen Menütexte zu jedem MP
#endif

as one can see, I do not initialise my arrays fully, as I'm in a development phase, but the first bytes should be zeroed out correctly AFAIK.
But, when accessing my stored values later in a third file: (uimenu.cpp)
#include "uimenu.h" // which includes globals.h and initialisation.h

// somewhere in the code inside a function, with uint8_t mp=0:
Serial.print(pgm_read_byte(gl_PsNMenuType[mp]));

The last line should print 0, as stated in initialisation, but it prints 12.
So, I think, I'm doing sth. substantially wrong here, but have no clue at the moment. I have several guesses:

I should not use const with PROGMEM. I did this to be informed by the compiler, if I accidentally write to an array stored in flash.
I made some mess with #includes, perhaps with order of occurrence. At the moment I try to sort the order out.
There's something with having global variables or arrays defined and declared in a header and accessed in another source files function. But I cannot imagene, what.
Updated: something wrong with my indices for my arrays? is uint8_t insufficient?

If you need more information or code, I'll edit my question accordingly. Thanks in advance! I appreciate any help.
(all files were edited for brevity before posting them)
Update:
I moved the definitions of the progmem arrays to the source file and all macro constants (#define) to globals.h. The outcome is: different numbers are printed, but they are wrong whatsoever. I poked elsewhere into the progmem array and got other wrong numbers.

user10794: 
@TMa: seems to work! I totally missed the necessity of referencing the array element. Thanks a lot. But I did not get any compiler warnings without the reference operator. Why isn't this call type-safe?

The PROGMEM word is an attribute, not a type. It might be type-safe but not attribute-safe (if there is such a thing). See Data in Program Space

Reference
Putting constant data into program memory (PROGMEM)

4358: <p>The amount of memory needed for my user interface is outrageous. Hence I decided to use flash memory. But after some successful readouts from program space, problems emerge. </p>

<p><strong>Updated:</strong>
I have some sort of initialisation files to collect all global arrays which go into flash like this: (intitialisation.cpp)</p>

<pre><code>#ifndef INITIALISATIONDEF
#define INITIALISATIONDEF

#include "initialisation.h" //which includes Arduino libraries and "globals.h"


const uint8_t gl_PsNMenuType[MAXMENUS] PROGMEM = { 0, 0, 0, 0, 0};  // this is, what I intend to read out later. 
const uint8_t gl_PsNMenuParent[MAXMENUS] PROGMEM = { MAXMENUS, 0, 0, 0, 0};  
const uint8_t gl_PsNMenuFixTexts[MAXMENUS][MAXFIXTEXTSPM] PROGMEM = {  
  { 20, 2, MFTS, MFTS, MFTS}, // 0
  {2, 9, 1, MFTS, MFTS}, // 1
  {2, 10, MFTS, MFTS}, //2
  {2, 11, MFTS}, //3
  {2, 12, MFTS} //4

};
#endif
</code></pre>

<p><strong>Updated:</strong>
while I propagate all global vars via another header (globals.h):</p>

<pre><code>#ifndef GLOBALS
#define GLOBALS
#define SDTXT

#define MAXMENUS 80    
#define MAXFIXTEXTSPM 5  

#include "initialisation.h"
extern const uint8_t gl_PsNMenuType[MAXMENUS];
extern const uint8_t gl_PsNMenuParent[MAXMENUS];  // referenz auf den übergeordneten MP
extern const uint8_t gl_PsNMenuFixTexts[MAXMENUS][MAXFIXTEXTSPM];  // Liste der festen Menütexte zu jedem MP
#endif
</code></pre>

<p>as one can see, I do not initialise my arrays fully, as I'm in a development phase, but the first bytes should be zeroed out correctly AFAIK.</p>

<p>But, when accessing my stored values later in a third file: (uimenu.cpp)</p>

<pre><code>#include "uimenu.h" // which includes globals.h and initialisation.h

// somewhere in the code inside a function, with uint8_t mp=0:
Serial.print(pgm_read_byte(gl_PsNMenuType[mp]));
</code></pre>

<p>The last line should print 0, as stated in initialisation, but it prints 12.</p>

<p>So, I think, I'm doing sth. substantially wrong here, but have no clue at the moment. I have several guesses:</p>

<ol>
<li>I should not use const with PROGMEM. I did this to be informed by the compiler, if I accidentally write to an array stored in flash.</li>
<li>I made some mess with #includes, perhaps with order of occurrence. At the moment I try to sort the order out.</li>
<li>There's something with having global variables or arrays defined and declared in a header and accessed in another source files function. But I cannot imagene, what.</li>
<li><strong>Updated:</strong> something wrong with my indices for my arrays? is uint8_t insufficient?</li>
</ol>

<p>If you need more information or code, I'll edit my question accordingly. Thanks in advance! I appreciate any help.
(all files were edited for brevity before posting them)</p>

<p><strong>Update:</strong>
I moved the definitions of the progmem arrays to the source file and all macro constants (#define) to globals.h. The outcome is: different numbers are printed, but they are wrong whatsoever. I poked elsewhere into the progmem array and got other wrong numbers.</p>
 10794: <blockquote>
  <p>@TMa: seems to work! I totally missed the necessity of referencing the array element. Thanks a lot. But I did not get any compiler warnings without the reference operator. Why isn't this call type-safe?</p>
</blockquote>

<p>The PROGMEM word is an <strong>attribute</strong>, not a <strong>type</strong>. It might be type-safe but not attribute-safe (if there is such a thing). See <a href="http://www.nongnu.org/avr-libc/user-manual/pgmspace.html" rel="nofollow">Data in Program Space</a></p>

<hr>

<h2>Reference</h2>

<p><a href="http://gammon.com.au/progmem" rel="nofollow">Putting constant data into program memory (PROGMEM)</a></p>
