Index: /trunk/import/pp_laden.sql
===================================================================
--- /trunk/import/pp_laden.sql	(revision 314)
+++ /trunk/import/pp_laden.sql	(revision 315)
@@ -16,4 +16,6 @@
 --  2013-07-10 F.J. Bereinigen der alkis_beziehungen auskommentiert, wird jetzt im Trigger gelöst.
 --  2012-10-24 Neue Tabelle für die Präsentation von Straßennamen und -Klassifikationen
+--  2014-02-05 Bereits auskommentierte Aktionen gelöscht für die Beseitigung von Rdundanzen aus fehlerhaften Triggern
+
 
 -- ============================
@@ -41,126 +43,4 @@
 -- Besser wäre: sofort im Trigger bei replace entfernen.
 -- Siehe Schema in FUNCTION delete_feature_kill
-
--- 2013-07-10 Das folgende Delete auskommentiert. Das wird jetzt im Trigger gelöst.
-------
---	DELETE 
---	  FROM alkis_beziehungen AS bezalt        -- Beziehung Alt
---	 WHERE EXISTS
---		   (SELECT ogc_fid
---			 FROM alkis_beziehungen AS bezneu -- Beziehung Neu
---			WHERE bezalt.beziehung_von = bezneu.beziehung_von
---			  AND bezalt.beziehung_zu  = bezneu.beziehung_zu
---			  AND bezalt.beziehungsart = bezneu.beziehungsart
---			  AND bezalt.ogc_fid       < bezneu.ogc_fid
---			);
-------
-
--- Denkbar ist eine Variante für den Trigger, die zusätzlich
--- auf eine bestimmte gml_id filtert.
--- Damit wäre die DB schon während der Konvertierung konsistenter.
--- Nachtrag 2013-02-20:
--- Diese provisorische Lösung korrigiert nur die Fälle, wo ein Replace eine redundante Beziehung
--- einträgt. Wenn ein Objekt und seine Beziehung gleichzeitig geändert wird, wird der alte
--- Eintrag nicht gefunden und verbleibt in den Beziehungen.
--- Siehe z.B. in Datei "sichten.sql" die Abfrage "mehrfache_buchung_zu_fs" 
-
-
--- Mehrfache Buchungen zu einem Flurstück korrigieren.
--- Neu 2013-02-21
--- Dieser Fehler enststeht, wenn ein Replace zu "ax_flurstueck" gleichzeitig die
--- Beziehung 'istGebucht' zu "ax_buchungsStelle" ändert.
--- Kann entfallen, sobald PostNAS bei Replace die "alkis_beziehungen" richtig fortführt.
-
--- Version Marvin Brandt, Unna
---	DELETE
---	--  SELECT *
---	FROM alkis_beziehungen a1
---	WHERE a1.beziehung_von = ANY(SELECT gml_id FROM (
---				SELECT f.*,
---						(SELECT count(f2.gml_id) as anzahl
---						FROM ax_flurstueck f2
---						JOIN alkis_beziehungen a1 ON f2.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht'
---						WHERE f2.gml_id = f.gml_id
---						) as anzahl
---					FROM ax_flurstueck f
---					) as sub
---				WHERE sub.anzahl > 1 )
---	AND a1.beziehungsart = 'istGebucht'
---	AND a1.ogc_fid = (SELECT min(sub.ogc_fid) as ogc_fid FROM (
---		SELECT a1.*,
---			(SELECT count(f2.gml_id) as anzahl
---				FROM ax_flurstueck f2
---				JOIN alkis_beziehungen a1 ON f2.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht'
---				WHERE f2.gml_id = f.gml_id
---			) as anzahl
---		FROM ax_flurstueck f
---		JOIN alkis_beziehungen a1 
---		ON f.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht'
---		) as sub
---	WHERE sub.beziehung_von = a1.beziehung_von);
-
-
--- 2013-07-10 Das folgende Delete auskommentiert. Das wird jetzt im Trigger gelöst
-------
---	-- Version Frank Jäger, Lemgo 
---	DELETE
---	-- SELECT *   -- TEST: erst mal schauen, was gelöscht würde, wenn ...
---	FROM alkis_beziehungen b
---	WHERE b.beziehungsart = 'istGebucht'
---	  -- Die erste subquery zählt die Buchungen zu einer (Flurstücks-) gml_id.
---	  -- Es wird nur dort gelöscht, wo mehrerer Buchungen existieren.
---	  AND 1 < 
---		 ( SELECT count(f1.ogc_fid) AS anzfs
---			FROM ax_flurstueck f1
---			JOIN alkis_beziehungen z
---			  ON f1.gml_id = z.beziehung_von
---		   WHERE f1.gml_id = b.beziehung_von
---			 AND z.beziehungsart = 'istGebucht'
---		   GROUP BY f1.gml_id )
---	  -- Die zweite Subquery liefert die letzte (= aktuelle) Beziehung.
---	  -- Diese aktuelle Buchung wird vom Löschen ausgeschlossen.
---	  AND b.ogc_fid <
---		 ( SELECT max(a.ogc_fid) AS maxi
---			FROM ax_flurstueck f2
---			JOIN alkis_beziehungen a
---			  ON f2.gml_id = a.beziehung_von
---		   WHERE f2.gml_id = b.beziehung_von
---			 AND a.beziehungsart = 'istGebucht'
---		   GROUP BY a.beziehung_von )
---	-- bei Test mit SELECT darf man sortieren:
---	--  ORDER BY b.beziehung_von, b.ogc_fid
---	;
-------
-
-
--- SELECT *
---  FROM alkis_beziehungen AS bezalt
---  WHERE EXISTS
---        (SELECT ogc_fid
---          FROM alkis_beziehungen AS bezneu
---         WHERE bezalt.beziehung_von = bezneu.beziehung_von
---           AND bezalt.beziehung_zu  = bezneu.beziehung_zu
---           AND bezalt.beziehungsart = bezneu.beziehungsart
---           AND bezalt.ogc_fid       < bezneu.ogc_fid
---         );
-
--- SELECT *
---  FROM alkis_beziehungen AS bezalt
---  WHERE EXISTS
---        (SELECT ogc_fid
---          FROM alkis_beziehungen AS bezneu
---         WHERE bezalt.beziehung_von = bezneu.beziehung_von
---           AND bezalt.beziehung_zu  = bezneu.beziehung_zu
---           AND bezalt.beziehungsart = bezneu.beziehungsart
---           AND bezalt.ogc_fid       < bezneu.ogc_fid
---         )
---      -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf,
---      -- die aktuell noch in der Delet-Tabelle stehen
---      AND EXISTS
---         (SELECT ogc_fid
---          FROM delete
---          WHERE bezalt.beziehung_von = substr(featureid, 1, 16)
---             OR bezalt.beziehung_zu  = substr(featureid, 1, 16)
---         );
 
 
@@ -199,5 +79,4 @@
 
 -- Straßen - N a m e n  und  - K l a s s i f i k a t i o n
--- NEU 2013-10-24
 -- Tabellen für die Präsentation von Straßen-Namen und -Klassifikationen
 -- Daten aus dem View "ap_pto_stra" werden im PostProcessing gespeichert in der Tabelle "pp_strassenname".
@@ -410,4 +289,3 @@
   WHERE z.gemeinde is Null;      -- ..  noch nicht vorhanden ist
 
-
 -- ENDE --
Index: /trunk/import/sichten.sql
===================================================================
--- /trunk/import/sichten.sql	(revision 314)
+++ /trunk/import/sichten.sql	(revision 315)
@@ -29,4 +29,5 @@
 --  2014-01-29 Neuer View "strasse_als_gewanne" zur Fehlersuche.
 --  2014-01-31 Kommentar
+--  2014-02-06 nachmigration_aehnliche_anschriften
 
 -- Bausteine fÃŒr andere Views:
@@ -1004,3 +1005,29 @@
 
 
+
+-- Suche nach Fehlern in den Daten, die moeglicherweise aus der Migration stammen und
+-- im Rahmen der Nachmigration noch korrigiert werden muessen.
+
+CREATE OR REPLACE VIEW nachmigration_aehnliche_anschriften
+AS
+  SELECT DISTINCT p.gml_id, p.nachnameoderfirma, p.vorname, 
+        a1.ort_post, a1.strasse AS strasse1, a2.strasse AS strasse2, a1.hausnummer
+     -- , b1.import_id AS import1, b2.import_id AS import2
+    FROM ax_person         p
+    JOIN alkis_beziehungen b1 ON b1.beziehung_von=p.gml_id
+    JOIN ax_anschrift      a1 ON a1.gml_id=b1.beziehung_zu
+    JOIN alkis_beziehungen b2 ON b2.beziehung_von=p.gml_id
+    JOIN ax_anschrift      a2 ON a2.gml_id=b2.beziehung_zu
+    WHERE b1.beziehungsart='hat' 
+      AND b2.beziehungsart='hat'
+      AND a1.gml_id    <>  a2.gml_id
+      AND a1.ort_post   =  a2.ort_post
+      AND a1.strasse    like trim(a2.strasse, '.') || '%'
+      AND a1.hausnummer =  a2.hausnummer
+    ORDER BY p.nachnameoderfirma, p.vorname;
+
+COMMENT ON VIEW nachmigration_aehnliche_anschriften
+ IS 'Zu einer Person gibt es mehrere Anschriften, die in Ort und Hausnummer identisch sind und beim StraÃennemen entweder auch identisch sind oder eine AbkÃŒrzung mit Punkt enthalten.';
+
+
 -- END --
Index: /trunk/info/info/alkis/alkisstrasse.php
===================================================================
--- /trunk/info/info/alkis/alkisstrasse.php	(revision 314)
+++ /trunk/info/info/alkis/alkisstrasse.php	(revision 315)
@@ -204,5 +204,5 @@
 		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
 		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken"></a>&nbsp;
-		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.ico" width="16" height="16" alt="Export" /></a>&nbsp;
+		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.ico" width="16" height="16" alt="Export"></a>&nbsp;
 	</div>
 </form>
Index: /trunk/info/info/alkis/alkisfkt.php
===================================================================
--- /trunk/info/info/alkis/alkisfkt.php	(revision 314)
+++ /trunk/info/info/alkis/alkisfkt.php	(revision 315)
@@ -5,9 +5,10 @@
 
 	Version:
-	2010-12-17  Astrid Emde: Prepared Statements (pg_query -> pg_prepare + pg_execute)
-	2011-11-01  *Left* Join - Fehlertoleranz bei unvollstaendigen Schluesseltabellen
-	2011-11-02  Parameter debug in function eigentuemer
-	2011-11-17  Variable ($debug, $idanzeige, $showkey) von Parameter nach global. Die heiÃen in allen Programmteilen gleich.
-	2014-01-22	Eigentuemerart: Mehr Werte und Zugriff auf DB-SchlÃŒssel-Tabelle 
+	2010-12-17 Astrid Emde: Prepared Statements (pg_query -> pg_prepare + pg_execute)
+	2011-11-01 *Left* Join - Fehlertoleranz bei unvollstaendigen Schluesseltabellen
+	2011-11-02 Parameter debug in function eigentuemer
+	2011-11-17 Variable ($debug, $idanzeige, $showkey) von Parameter nach global. Die heiÃen in allen Programmteilen gleich.
+	2014-01-22 Eigentuemerart: Mehr Werte und Zugriff auf DB-SchlÃŒssel-Tabelle
+	2014-02-06 Korrektur EigentÃŒmerart
 */
 
@@ -73,8 +74,8 @@
 function kurz_namnr($lang) {
 	// Namensnummer kuerzen. Nicht benoetigte Stufen der Dezimalklassifikation abschneiden
-	$kurz=str_replace(".00","",$lang);	// leere Stufen (nur am Ende)
-	$kurz=str_replace("0000","",$kurz);	// ganz leer (am Anfang)
-	$kurz=ltrim($kurz, "0");				// fuehrende Nullen am Anfang
-	$kurz=str_replace(".0",".",$kurz);	// fuehrende Null jeder Stufe
+	$kurz=str_replace(".00","",$lang); // leere Stufen (nur am Ende)
+	$kurz=str_replace("0000","",$kurz); // ganz leer (am Anfang)
+	$kurz=ltrim($kurz, "0"); // fuehrende Nullen am Anfang
+	$kurz=str_replace(".0",".",$kurz); // fuehrende Null jeder Stufe
 	return $kurz;
 }
@@ -169,4 +170,5 @@
 		$j++;
 	} // Ende Flurstueck
+	pg_free_result($resf);
 	return $j;
 }
@@ -176,6 +178,6 @@
 	// Sp.1 = Namennummer, Sp. 2 = Name / Adresse, Sp. 3 = Link
 	// Parameter:
-	//		$gmlid = ID des GB-Blattes
-	//		$mitadresse = Option (true/false) ob auch die Adresszeile ausgegeben werden soll
+	//	$gmlid = ID des GB-Blattes
+	//	$mitadresse = Option (true/false) ob auch die Adresszeile ausgegeben werden soll
 	// Return = Anzahl Namensnummern
 
@@ -195,9 +197,6 @@
 	$sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, ";
 	$sqln.="n.artderrechtsgemeinschaft AS adr, n.beschriebderrechtsgemeinschaft as beschr, n.eigentuemerart, n.anlass ";
-	$sqln.="FROM ax_namensnummer n ";
-	$sqln.="JOIN alkis_beziehungen b ON b.beziehung_von=n.gml_id ";
-	$sqln.="WHERE b.beziehung_zu= $1 "; // id blatt
-	$sqln.="AND b.beziehungsart='istBestandteilVon' ";
-	$sqln.="ORDER BY laufendenummernachdin1421;";
+	$sqln.="FROM ax_namensnummer n JOIN alkis_beziehungen b ON b.beziehung_von=n.gml_id ";
+	$sqln.="WHERE b.beziehung_zu= $1 AND b.beziehungsart='istBestandteilVon' ORDER BY laufendenummernachdin1421;";
 
 	$v = array($gmlid);
@@ -245,5 +244,5 @@
 			// aus welchen Namensnummern die aktuelle entstanden ist.
 
-		// Schleife 2: P e r s o n  
+		// Schleife 2: P e r s o n
 		// Beziehung: ax_person  <benennt<  ax_namensnummer
 		$sqlp ="SELECT p.gml_id, p.nachnameoderfirma, p.vorname, p.geburtsname, p.geburtsdatum, p.namensbestandteil, p.akademischergrad ";
@@ -276,10 +275,12 @@
 			}
 			// Spalte 2 = Angaben
-			$eiart=eigentuemerart($rown["eigentuemerart"]);
-			echo "\n\t\t<p class='geig' title='Eigent&uuml;merart ".$eiart."'>".$diePerson."</p>\n\t</td>";
+			$eiartkey=$rown["eigentuemerart"];
+			$eiart=eigentuemerart($eiartkey);
+			echo "\n\t\t<p class='geig' title='Eigent&uuml;merart: ".$eiart."'>".$diePerson."</p>\n\t</td>";
 
 			// Spalte 3 = Link
 			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
 				if ($idanzeige) {linkgml($gkz, $rowp["gml_id"], "Person"); echo "&nbsp";}
+				if ($showkey) {echo "<span class='key'>(".$eiartkey.")</span> ";}
 				echo "\n\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$rowp[0];
 				if ($idanzeige) {echo "&amp;id=j";}
@@ -292,18 +293,14 @@
 				// Schleife 3:  A d r e s s e  (OPTIONAL)
 				$sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland ";
-				$sqla.="FROM ax_anschrift a ";
-				$sqla.="JOIN alkis_beziehungen b ON a.gml_id=b.beziehung_zu ";
+				$sqla.="FROM ax_anschrift a JOIN alkis_beziehungen b ON a.gml_id=b.beziehung_zu ";
 				$sqla.="WHERE b.beziehung_von= $1 AND b.beziehungsart='hat';"; // ORDER?
-
 				$gmlp=$rowp["gml_id"]; // Person
 				$v = array($gmlp);
 				$resa = pg_prepare("", $sqla);
 				$resa = pg_execute("", $v);
-
 				if (!$resa) {
 					echo "\n\t<p class='err'>Fehler bei Adressen</p>\n";
 					if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqla."<br>$1=gml= '".$gmlp."'</p>";}
 				}
-
 				$j=0;
 				while($rowa = pg_fetch_array($resa)) {
@@ -343,5 +340,7 @@
 					$j++;
 				}
+				pg_free_result($resa);
 			} // End if
+
 			// 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
 			$i++; // cnt Person
@@ -370,5 +369,6 @@
 		if ($debug > 0) {echo "<p class='dbg'>keine Namensnummern zum Blatt</p>";}
 		if ($debug > 2) {echo "<p class='dbg'>Namensnummern: SQL=<br>".$sqln."<br>$1=gml(Blatt)= '".$gmlid."'</p>";}
-	}	
+	}
+	pg_free_result($resn);
 	return $n; 
 } // End Function eigentuemer
@@ -403,7 +403,8 @@
 	// Die hÃ€ufigsten Werte direkt aus den Programmcode liefern, ggf. angepasst.
 	// FÃŒr seltene Werte in der Datenbank nachschlagen.
-	// SchlÃŒsseltabelle dazu aus GeoInfoDok ist vorhanden seit 2014-01-22.
+	// SchlÃŒsseltabelle dazu ist vorhanden seit 2014-01-22.
 	// Hier Verwendung fÃŒr Text zum Link.
 	// FÃŒr korrekte Wiedergabe der amtlichen Werte einen Join auf Tabelle verwenden statt dieser Function. 
+	global $debug;
 	switch ($key) {
 		case 1000: $wert = "Nat&uuml;rliche Person"; break; // singular fuer Link-Text
@@ -425,14 +426,15 @@
 			if ($res) {
 				$row=pg_fetch_array($res);
-				$wert==htmlentities($row["bezeichner"], ENT_QUOTES, "UTF-8");
+				$wert=htmlentities($row["bezeichner"], ENT_QUOTES, "UTF-8");
+				if ($wert == "") {$wert="** Eigent&uuml;merart '".$key."' nicht gefunden **";}
 			} else {
-				echo "\n\t<p class='err'>Fehler bei DB-Zugriff auf SchlÃŒssel EigentÃŒmerart.</p>\n";
-				$wert = "** Unbekannte Eigent&uuml;merart '".$key."' **";
-			}
+				echo "\n\t<p class='err'>Fehler bei DB-Zugriff auf EigentÃŒmerart.</p>\n";
+				$wert="** Unbekannte Eigent&uuml;merart '".$key."' **";
+			}
+			pg_free_result($res);
 			break;
 	}
 	return $wert;
 }
-
 
 // Entschluesslung ax_buchungsblatt.blattart
Index: /trunk/info/info/alkis/alkisfshist.php
===================================================================
--- /trunk/info/info/alkis/alkisfshist.php	(revision 314)
+++ /trunk/info/info/alkis/alkisfshist.php	(revision 315)
@@ -314,8 +314,6 @@
 	<div class='buttonbereich noprint'>
 	<hr>
-		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
-		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken" /></a>&nbsp;
-<!--	<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.ico" width="16" height="16" alt="Export" /></a>&nbsp;
-		<a title="Seite schlie&szlig;en" href="javascript:window.close()"><img src="ico/close.ico" width="16" height="16" alt="Ende" /></a>	-->
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken"></a>&nbsp;
 	</div>
 </form>
Index: /trunk/info/info/alkis/alkishaus.php
===================================================================
--- /trunk/info/info/alkis/alkishaus.php	(revision 314)
+++ /trunk/info/info/alkis/alkishaus.php	(revision 315)
@@ -374,8 +374,6 @@
 	<div class='buttonbereich noprint'>
 	<hr>
-		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
-		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken" /></a>&nbsp;
-<!--	<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.ico" width="16" height="16" alt="Export" /></a>&nbsp;
-		<a title="Seite schlie&szlig;en" href="javascript:window.close()"><img src="ico/close.ico" width="16" height="16" alt="Ende" /></a>	-->
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken"></a>&nbsp;
 	</div>
 </form>
Index: /trunk/info/info/alkis/alkisbestnw.php
===================================================================
--- /trunk/info/info/alkis/alkisbestnw.php	(revision 314)
+++ /trunk/info/info/alkis/alkisbestnw.php	(revision 315)
@@ -476,8 +476,7 @@
 	<div class='buttonbereich noprint'>
 	<hr>
-		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
-		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken" /></a>&nbsp;
-	 	<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download_gb.ico" width="32" height="16" alt="Export" /></a>&nbsp;
-<!--	<a title="Seite schlie&szlig;en" href="javascript:window.close()"><img src="ico/close.ico" width="16" height="16" alt="Ende" /></a>	-->
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken"></a>&nbsp;
+	 	<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download_gb.ico" width="32" height="16" alt="Export"></a>&nbsp;
 	</div>
 </form>
Index: /trunk/info/info/alkis/alkisnamstruk.php
===================================================================
--- /trunk/info/info/alkis/alkisnamstruk.php	(revision 314)
+++ /trunk/info/info/alkis/alkisnamstruk.php	(revision 315)
@@ -6,6 +6,7 @@
 
 	Version:
-	2013-04-08  deprecated "import_request_variables" ersetzt
-	2013-11-22	Namensbestandteil ("von") in Kompakt-Adresse vor den Namen setzen
+	2013-04-08 deprecated "import_request_variables" ersetzt
+	2013-11-22 Namensbestandteil ("von") in Kompakt-Adresse vor den Namen setzen
+	2014-02-06 Redundante Adressen kommen vor. Nur eine davon anzeigen.
 
 	ToDo: Sortierung der GrundbÃŒcher zum Namen
@@ -64,13 +65,16 @@
 	$nam=htmlentities($row["nachnameoderfirma"], ENT_QUOTES, "UTF-8");
 	$geb=htmlentities($row["geburtsname"], ENT_QUOTES, "UTF-8");
-	$anr=anrede($row["anrede"]);
+	$anrk=$row["anrede"];
+	$anr=anrede($anrk);
 	$nbest=$row["namensbestandteil"];
 	$aka=$row["akademischergrad"];
 
 	echo "<table>\n";
-		echo "\t<tr><td class='nhd'>Anrede:</td><td class='nam'>".$anr."</td></tr>\n";
+		echo "\t<tr><td class='nhd'>Anrede:</td><td class='nam'>";
+		if ($showkey) {echo "<span class='key' title='Anredekennung'>(".$anrk.")</span> ";}
+		echo $anr."</td></tr>\n";
 		echo "\t<tr><td class='nhd'>Nachname oder Firma:</td><td class='nam'>".$nam."</td></tr>\n";
-		echo "\t<tr><td class='nhd'>Vorname:</td><td class='nam'>".$vor."</td></tr>\n";
-		echo "\t<tr><td class='nhd'>Geburtsname:</td><td class='nam'>".$geb."</td></tr>\n";
+		echo "\t<tr><td class='nhd'>Vorname:</td><td class='nam'>".$vor."&nbsp;</td></tr>\n";
+		echo "\t<tr><td class='nhd'>Geburtsname:</td><td class='nam'>".$geb."&nbsp;</td></tr>\n";
 		echo "\t<tr><td class='nhd'>Geburtsdatum:</td><td class='nam'>".$row["geburtsdatum"]."&nbsp;</td></tr>\n";
 		echo "\t<tr><td class='nhd'>Namensbestandteil:</td><td class='nam'>".$nbest."&nbsp;</td></tr>\n";
@@ -81,13 +85,12 @@
 	echo "\n<h3><img src='ico/Strasse_mit_Haus.ico' width='16' height='16' alt=''> Adresse</h3>\n";
 	$sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland ";
-	$sqla.="FROM ax_anschrift a ";
-	$sqla.="JOIN alkis_beziehungen b ON a.gml_id=b.beziehung_zu ";
-	$sqla.="WHERE b.beziehung_von= $1 ";
-	$sqla.="AND b.beziehungsart='hat';"; //"ORDER  BY ?;";
+	$sqla.="FROM ax_anschrift a JOIN alkis_beziehungen b ON a.gml_id=b.beziehung_zu ";
+	$sqla.="WHERE b.beziehung_von= $1 AND b.beziehungsart='hat' ";
+	// Es kÃ¶nnen redundante Adressen vorhanden sein, z.B. aus Migration, temporÃ€r aus LBESAS. Die letzte davon anzeigen.
+	$sqla.="ORDER BY a.gml_id DESC ;";
 
 	$v = array($gmlid);
 	$resa = pg_prepare("", $sqla);
 	$resa = pg_execute("", $v);
-
 	if (!$resa) {
 		echo "\n<p class='err'>Fehler bei Adressen</p>\n";
@@ -98,30 +101,47 @@
 
 	$j=0;
+	// Parameter $multiadress = j zeigt alle Adressen an
 	while($rowa = pg_fetch_array($resa)) {
-		$gmla=$rowa["gml_id"];
-		$plz=$rowa["plz"];
-		$ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
-		$str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
-		$hsnr=$rowa["hausnummer"];
-		$land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
-		if ($idanzeige) { linkgml($gkz, $gmla, "Adresse"); }
-
-		echo "<table>\n";
-			echo "\t<tr><td class='nhd'>PLZ:</td><td class='nam'>".$plz."</td></tr>\n";
-			echo "\t<tr><td class='nhd'>Ort:</td><td class='nam'>".$ort."</td></tr>\n";
-			echo "\t<tr><td class='nhd'>Strasse:</td><td class='nam'>".$str."</td></tr>\n";
-			echo "\t<tr><td class='nhd'>Hausnummer:</td><td class='nam'>".$hsnr."</td></tr>\n";
-			echo "\t<tr><td class='nhd'>Land:</td><td class='nam'>".$land."</td></tr>\n";
-		echo "\n</table>\n<br>\n";
 		$j++;
-
-		// Name und Adresse Kompakt (im Rahmen)
-		// Alles was man fuer ein Anschreiben braucht
-		echo "<img src='ico/Namen.ico' width='16' height='16' alt='Brief' title='Anschrift'>"; // Symbol "Brief"
-		echo "\n<div class='adr' title='Anschrift'>".$anr." ".$aka." ".$vor." ".$nbest." ".$nam."<br>";
-		echo "\n".$str." ".$hsnr."<br>";
-		echo "\n".$plz." ".$ort."</div>";
-	}
-	if ($j == 0) {echo "\n<p class='err'>Keine Adressen.</p>\n";}
+		if ($multiadress == "j" OR $j == 1) {
+			$gmla=$rowa["gml_id"];
+			$plz=$rowa["plz"];
+			$ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
+			$str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
+			$hsnr=$rowa["hausnummer"];
+			$land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
+			if ($idanzeige) { linkgml($gkz, $gmla, "Adresse"); }
+
+			echo "<table>\n";
+				echo "\t<tr><td class='nhd'>PLZ:</td><td class='nam'>".$plz."</td></tr>\n";
+				echo "\t<tr><td class='nhd'>Ort:</td><td class='nam'>".$ort."</td></tr>\n";
+				echo "\t<tr><td class='nhd'>Strasse:</td><td class='nam'>".$str."</td></tr>\n";
+				echo "\t<tr><td class='nhd'>Hausnummer:</td><td class='nam'>".$hsnr."</td></tr>\n";
+				echo "\t<tr><td class='nhd'>Land:</td><td class='nam'>".$land."</td></tr>\n";
+			echo "\n</table>\n<br>\n";
+
+			// Name und Adresse Kompakt (im Rahmen) - Alles was man fuer ein Anschreiben braucht
+			echo "<img src='ico/Namen.ico' width='16' height='16' alt='Brief' title='Anschrift'>"; // Symbol "Brief"
+			echo "\n<div class='adr' title='Anschrift'>".$anr." ".$aka." ".$vor." ".$nbest." ".$nam."<br>";
+			echo "\n".$str." ".$hsnr."<br>";
+			echo "\n".$plz." ".$ort."</div>";
+		}
+	}
+	pg_free_result($resa);
+	if ($j == 0) {
+		echo "\n<p class='err'>Keine Adressen.</p>\n";
+	} elseif ($j > 1) {
+		echo "\n\t\t<p class='nwlink noprint'>";
+		echo "\n\t\t\t<a href='".$_SERVER['PHP_SELF']. "?gkz=".$gkz."&amp;gmlid=".$gmlid;
+		if ($idanzeige) {echo "&amp;id=j";}
+		if ($showkey) {echo "&amp;showkey=j";}
+		if ($multiadress == "j") {
+			echo "&amp;multiadress=n' title='mehrfache Adressen unterdr&uuml;cken'>erste Adresse ";
+		} else {
+			echo "&amp;multiadress=j' title='Adressen ggf. mehrfach vorhanden'>alle Adressen ";
+		}
+		echo "\n\t\t\t</a>";
+		echo "\n\t\t</p>";
+	}
 
 	// *** G R U N D B U C H ***
@@ -130,14 +150,11 @@
 	//                               >bestehtAusRechtsverhaeltnissenZu> namensnummer   (Nebenzweig/SonderfÃ€lle?)
 
-	$sqlg ="SELECT n.gml_id AS gml_n, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, ";
-	$sqlg.="g.gml_id AS gml_g, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung as nr, g.blattart, ";
-	$sqlg.="b.bezeichnung AS beznam ";
-	$sqlg.="FROM alkis_beziehungen bpn ";
-	$sqlg.="JOIN ax_namensnummer n ON bpn.beziehung_von=n.gml_id ";
+	$sqlg ="SELECT n.gml_id AS gml_n, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, g.gml_id AS gml_g, ";
+	$sqlg.="g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung as nr, g.blattart, b.bezeichnung AS beznam ";
+	$sqlg.="FROM alkis_beziehungen bpn JOIN ax_namensnummer n ON bpn.beziehung_von=n.gml_id ";
 	$sqlg.="JOIN alkis_beziehungen bng ON n.gml_id=bng.beziehung_von ";
 	$sqlg.="JOIN ax_buchungsblatt g ON bng.beziehung_zu=g.gml_id ";
 	$sqlg.="LEFT JOIN ax_buchungsblattbezirk b ON g.land = b.land AND g.bezirk = b.bezirk ";
-	$sqlg.="WHERE bpn.beziehung_zu= $1 ";
-	$sqlg.="AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
+	$sqlg.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
 	$sqlg.="ORDER BY g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung;";
 	// buchungsblatt... mal mit und mal ohne fuehrende Nullen, bringt die Sortierung durcheinander
@@ -226,8 +243,9 @@
 
 		echo "\n</tr>";
-		// +++ >bestehtAusRechtsverhaeltnissenZu> namensnummer ??
-		//     z.B. eine Namennummer "Erbengemeinschaft" zeigt auf Namensnummern mit EigentÃŒmern
+		// +++ >bestehtAusRechtsverhaeltnissenZu> namensnummer ?
+		// z.B. eine Namennummer "Erbengemeinschaft" zeigt auf Namensnummern mit EigentÃŒmern
 		$i++;
 	}
+	pg_free_result($resg);
 	echo "</table>";
 	if ($i == 0) {echo "\n<p class='err'>Kein Grundbuch.</p>\n";}
@@ -240,8 +258,7 @@
 	<div class='buttonbereich noprint'>
 	<hr>
-		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
-		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken" /></a>&nbsp;
-		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.ico" width="32" height="16" alt="Export" /></a>&nbsp;
-<!-- <a title="Seite schlie&szlig;en" href="javascript:window.close()"><img src="ico/close.ico" width="16" height="16" alt="Ende" /></a>	-->
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken"></a>&nbsp;
+		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download.ico" width="32" height="16" alt="Export"></a>&nbsp;
 	</div>
 </form>
Index: /trunk/info/info/alkis/alkisgebaeudenw.php
===================================================================
--- /trunk/info/info/alkis/alkisgebaeudenw.php	(revision 314)
+++ /trunk/info/info/alkis/alkisgebaeudenw.php	(revision 315)
@@ -279,6 +279,6 @@
 	<div class='buttonbereich noprint'>
 	<hr>
-		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
-		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken" /></a>
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken"></a>
 	</div>
 </form>
Index: /trunk/info/info/alkis/alkisfsnw.php
===================================================================
--- /trunk/info/info/alkis/alkisfsnw.php	(revision 314)
+++ /trunk/info/info/alkis/alkisfsnw.php	(revision 315)
@@ -18,5 +18,6 @@
 	2013-06-24 Unna: Bodenneuordnung, strittige Grenze
 	2013-06-27 Bodenneuordnung u. stritt.Gr. in Tabellen-Struktur, Link zur Bodenerneuerung (neues Modul)
-    2014-01-30 Korrektur Nutzungsart (z.B. Friedhof mit class=0 hatte Anzeige "unbekannt")
+	2014-01-30 Korrektur Nutzungsart (z.B. Friedhof mit class=funktion=0 hatte Anzeige "unbekannt")
+	2014-02-06 Korrektur
 
 	ToDo:
@@ -90,5 +91,5 @@
 		$fskzdb=$land.$zgemkg.$zflur.$zzaehler.$znenner.'__'; // FS-Kennz. Format Datenbank
 	}
-	// Feld flurstueckskennzeichen ist in DB indiziert  
+	// Feld flurstueckskennzeichen ist in DB indiziert
 	// Format z.B.'052647002001910013__' oder '05264700200012______'
 	$sql ="SELECT gml_id FROM ax_flurstueck WHERE flurstueckskennzeichen= $1 ;";
@@ -259,6 +260,5 @@
 
 // Lagebezeichnung Mit Hausnummer
-//   ax_flurstueck  >weistAuf>  AX_LagebezeichnungMitHausnummer
-//                  <gehoertZu<
+// ax_flurstueck  >weistAuf>  AX_LagebezeichnungMitHausnummer
 $sql ="SELECT DISTINCT l.gml_id, l.gemeinde, l.lage, l.hausnummer, s.bezeichnung ";
 $sql.="FROM alkis_beziehungen v ";
@@ -291,5 +291,5 @@
 		echo "\n\t<td class='lr'>";
 		if ($showkey) {
-			echo "<span class='key'>(".$row["lage"].")</span>&nbsp;";
+			echo "<span class='key' title='StraÃenschl&uuml;ssel'>(".$row["lage"].")</span>&nbsp;";
 		}
 		echo $sname."&nbsp;".$row["hausnummer"];
@@ -309,6 +309,5 @@
 
 // L a g e b e z e i c h n u n g   O h n e   H a u s n u m m e r  (Gewanne oder nur Strasse)
-//   ax_flurstueck  >zeigtAuf>  AX_LagebezeichnungOhneHausnummer
-//                  <gehoertZu<
+// ax_flurstueck  >zeigtAuf>  AX_LagebezeichnungOhneHausnummer
 $sql ="SELECT l.gml_id, l.unverschluesselt, l.gemeinde, l.lage, s.bezeichnung ";
 $sql.="FROM alkis_beziehungen v ";
@@ -388,5 +387,5 @@
 while($row = pg_fetch_array($res)) {
 	$grupp=$row["gruppe"]; // 4 Gruppen
-    $nutzid=$row["nutz_id"]; // 27 Tabellen, num. Key
+	$nutzid=$row["nutz_id"]; // 27 Tabellen, num. Key
 	$title=htmlentities($row["title"], ENT_QUOTES, "UTF-8"); // Titel der 27 Tabellen
 	$fldclass=$row["fldclass"]; // Name 1. Zusatzfeld
@@ -415,8 +414,8 @@
 
 		echo "\n\t<td class='lr'>";
-            if ($class == 0) {
-                if ($showkey) {echo "<span class='key'>(".$nutzid.")</span> ";}
-                echo $title; // Name der Tabelle
-            } elseif ( ($fldclass == "Funktion" OR $fldclass == "Vegetationsmerkmal") AND $label != "") { // Kurze Anzeige
+			if ($class == 0) {
+				if ($showkey) {echo "<span class='key'>(".$nutzid.")</span> ";}
+				echo $title; // Name der Tabelle
+			} elseif ( ($fldclass == "Funktion" OR $fldclass == "Vegetationsmerkmal") AND $label != "") { // Kurze Anzeige
 				if ($showkey) {echo "<span class='key' title='".$fldclass."'>(".$nutzid."-".$class.")</span> ";}
 				if ($blabla = "") {
@@ -498,7 +497,6 @@
 //  b.name, b.artderfestlegung, 
 
-$sql_boden ="SELECT a.wert, a.bezeichner AS art_verf, ";
-$sql_boden.="b.gml_id AS verf_gml, b.bezeichnung AS verf_bez, b.name AS verf_name, ";
-$sql_boden.="d.bezeichnung AS stelle_bez, d.stelle AS stelle_key ";
+$sql_boden ="SELECT a.wert, a.bezeichner AS art_verf, b.gml_id AS verf_gml, b.bezeichnung AS verf_bez, ";
+$sql_boden.="b.name AS verf_name, d.bezeichnung AS stelle_bez, d.stelle AS stelle_key ";
 $sql_boden.="FROM ax_bauraumoderbodenordnungsrecht b JOIN ax_bauraumoderbodenordnungsrecht_artderfestlegung a ON a.wert = b.artderfestlegung ";
 $sql_boden.="LEFT JOIN ax_dienststelle d ON b.stelle = d.stelle ";
@@ -614,11 +612,7 @@
 $sql ="SELECT s.gml_id, s.buchungsart, s.laufendenummer as lfd, s.zaehler, s.nenner, ";
 $sql.="s.nummerimaufteilungsplan as nrpl, s.beschreibungdessondereigentums as sond, b.bezeichner AS bart ";
-//  s.beschreibungdesumfangsderbuchung as umf,  ?
-$sql.="FROM alkis_beziehungen v "; // Bez Flurst.- Stelle.
-$sql.="JOIN ax_buchungsstelle s ON v.beziehung_zu=s.gml_id ";
+$sql.="FROM alkis_beziehungen v JOIN ax_buchungsstelle s ON v.beziehung_zu=s.gml_id ";
 $sql.="LEFT JOIN ax_buchungsstelle_buchungsart b ON s.buchungsart = b.wert ";
-$sql.="WHERE v.beziehung_von= $1 "; // id FS
-$sql.="AND v.beziehungsart= $2 ";
-$sql.="ORDER BY s.laufendenummer;";
+$sql.="WHERE v.beziehung_von= $1 AND v.beziehungsart= $2 ORDER BY s.laufendenummer;";
 
 $v = array($gmlid,'istGebucht');
@@ -752,8 +746,7 @@
 	// Buchungstelle  >an>  Buchungstelle  >istBestandteilVon>  BLATT  ->  Bezirk
 	$sql ="SELECT s.gml_id AS s_gml, s.buchungsart, s.laufendenummer as lfd, ";
-	// , s.beschreibungdesumfangsderbuchung as umf   ?
 	$sql.="s.zaehler, s.nenner, s.nummerimaufteilungsplan as nrpl, s.beschreibungdessondereigentums as sond, ";
 	$sql.="b.gml_id AS g_gml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart, ";
-	$sql.="z.bezeichnung, a.bezeichner AS bart ";  // stelle -> amtsgericht
+	$sql.="z.bezeichnung, a.bezeichner AS bart "; // stelle -> amtsgericht
 	$sql.="FROM alkis_beziehungen an "; // Bez. Stelle - Stelle
 	$sql.="JOIN ax_buchungsstelle s ON an.beziehung_von = s.gml_id ";
@@ -763,6 +756,5 @@
 	$sql.="LEFT JOIN ax_buchungsstelle_buchungsart a ON s.buchungsart = a.wert ";
 	$sql.="WHERE an.beziehung_zu = $1 "; // id herrschende Buchungsstelle
-	$sql.="AND an.beziehungsart = 'an' ";
-	$sql.="AND v.beziehungsart = 'istBestandteilVon' ";
+	$sql.="AND an.beziehungsart = 'an' AND v.beziehungsart = 'istBestandteilVon' ";
 	$sql.="ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung;";
 	$v = array($gmls);
@@ -835,5 +827,5 @@
 			echo "\n<p>Blattart: ".$blattartan." (".$blattkeyan.").<br>\n"; 
 		}
-		// +++ BeschreibungDesUmfangsDerBuchung ?
+		//++ BeschreibungDesUmfangsDerBuchung?
 		if ($rowan["nrpl"] != "") {
 			echo "<p class='nrap' title='Nummer im Aufteilungsplan'>Nummer <span class='wichtig'>".$rowan["nrpl"]."</span> im Aufteilungsplan.</p>";
@@ -861,9 +853,7 @@
 	<div class='buttonbereich noprint'>
 	<hr>
-		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck" /></a>&nbsp;
-		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken" /></a>&nbsp;
-		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download_fs.ico" width="32" height="16" alt="Export" /></a>&nbsp;
-<!-- <a title="Export Grundbuchdaten als CSV" href='javascript:ALKISexportGB()'><img src="ico/download_gb.ico" width="32" height="16" alt="Export" /></a>&nbsp; -->
-<!-- <a title="Seite schlie&szlig;en" href="javascript:window.close()"><img src="ico/close.ico" width="16" height="16" alt="Ende" /></a>	-->
+		<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.ico" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+		<a title="Drucken" href='javascript:window.print()'><img src="ico/print.ico" width="16" height="16" alt="Drucken"></a>&nbsp;
+		<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download_fs.ico" width="32" height="16" alt="Export"></a>&nbsp;
 	</div>
 </form>
Index: /trunk/mapbender/http/nav/alkisnav_eig.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_eig.php	(revision 314)
+++ /trunk/mapbender/http/nav/alkisnav_eig.php	(revision 315)
@@ -3,13 +3,13 @@
 	2013-04-16 "import_request_variables" entfÃ€llt in PHP 5.4
 	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung".
-					Stufe 2: GB *und* FS mit einem Klick anzeigen.
-					BlÃ€tterfunktion (Folgeseiten) fÃŒr lange Listen. 
-					Function extern gemeinsam genutzt in _eig und _grd.
-					Dazu Var-Namen harmonisieren: $gb wird $blattgml.
-					ZurÃŒck-Link, Titel der Transaktion anzeigen.
+				Stufe 2: GB *und* FS mit einem Klick anzeigen.
+				BlÃ€tterfunktion (Folgeseiten) fÃŒr lange Listen. 
+				Function extern gemeinsam genutzt in _eig und _grd.
+				Dazu Var-Namen harmonisieren: $gb wird $blattgml.
+				ZurÃŒck-Link, Titel der Transaktion anzeigen.
 	2013-04-29	Darstellung mit IE
 	2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
 	2013-05-14  Hervorhebung aktuelles Objekt, Parameter "gbkennz" auswerten,
-					Title auch auf Icon, IE zeigt sonst alt= als Title dar.
+				Title auch auf Icon, IE zeigt sonst alt= als Title dar.
 */
 $cntget = extract($_GET);
@@ -568,17 +568,17 @@
 
 // Quo Vadis?
-if($blattgml != "") {		// FlurstÃŒcke zum Grundbuch
+if($blattgml != "") { // FlurstÃŒcke zum Grundbuch
 
 	// Das Programm hat sich selbst verlinkt aus einer Liste der GB zu einem EigentÃŒmer.
 	// Wenn Parameter mitgegeben wurden, kÃ¶nnen diese fÃŒr einen "Link zurÃŒck" verwendet werden.
 	$trans="Flurst&uuml;cke zum Grundbuch";
-	getFSbyGB(true);				// mit BackLink
-
-} elseif($person != "") { 		// GrundbÃŒcher zur Person
+	getFSbyGB(true); // mit BackLink
+
+} elseif($person != "") { // GrundbÃŒcher zur Person
 	// Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske.
 	if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";}
 
 	// Die Filtereinstellung beeinflusst die Such-Strategie:
-	if ($gfilter == 0) {			// Keine Filterung auf "Gemeinde": groÃe Datenmenge
+	if ($gfilter == 0) { // Keine Filterung auf "Gemeinde": groÃe Datenmenge
 		if ($kennztyp > 1) {
 			$trans = "Grundb&uuml;cher in ".$zgbbez." von .."; // Filter GB-Bez
@@ -592,5 +592,5 @@
 			getFSbyGB(false); 	// Dann dazu auch gleich die Stufe 3 hinterher, aber ohne Backlink.
 		}
-	} else { 						// mit Filter auf Gemeinde: weniger Daten?
+	} else { // mit Filter auf Gemeinde: weniger Daten?
 		if ($kennztyp > 1) {
 			#trans="Grundb. und Flurst. in ".$zgbbez." von .. "; // zu lang
@@ -600,16 +600,16 @@
 			$trans="Grundb. und Flurst. von .."; // der EigentÃŒmer steht darunter
 		}
-		getGBuFSbyPerson();		// Schritte 2+3 gleichzeitig, dabei Gemeinde-Filter auf Stufe 3
-	}
-
-} elseif(isset($name)) {		// Suchbegriff aus Form: Suche nach Name
+		getGBuFSbyPerson(); // Schritte 2+3 gleichzeitig, dabei Gemeinde-Filter auf Stufe 3
+	}
+
+} elseif(isset($name)) { // Suchbegriff aus Form: Suche nach Name
 
 	$trans="Namensuche \"".$name."\"";
-	getEigByName(); 				// Suchen nach Namensanfang
-
-	if($person != "") {			// genau EIN Treffer zum Namen
+	getEigByName(); // Suchen nach Namensanfang
+
+	if($person != "") { // genau EIN Treffer zum Namen
 		if ($gfilter == 0) {
 			$trans="Grundb&uuml;cher zum Namen";
-			getGBbyPerson();		// Dann gleich das Grundbuch hinterher
+			getGBbyPerson(); // Dann gleich das Grundbuch hinterher
 		} else {
 			$trans="Grdb. und Flst. zum Namen";
Index: /trunk/mapbender/http/nav/alkisnav.css
===================================================================
--- /trunk/mapbender/http/nav/alkisnav.css	(revision 314)
+++ /trunk/mapbender/http/nav/alkisnav.css	(revision 315)
@@ -1,57 +1,54 @@
 /* Style fuer ALKIS-Navigation 
-	Version
-	2013-04-29	Abgleich Darstellung in IE/FF
-	2013-05-08  in Arbeit ...
+ Version
+  2013-04-29 Abgleich Darstellung in IE/FF
+  2013-05-15 EinrÃŒckungen vergrÃ¶Ãert
+  2014-02-06 kosmetische Ãberarbeitung 
 */
 body,p,a,.textfield,.sbutton	{font-family: Verdana, Arial, Helvetica, sans-serif;}
-body		{font-size: 11px; color: #000000; margin: 0px; border: 0px;}
-p			{font-size: 10px;}
+body {font-size: 11px; color: #000000; margin: 0px; border: 0px;}
+p {font-size: 10px;}
 p.hilfe 	{font-size:  9px; text-align: right; color: gray; padding-right: 3px;} /* Programmier-Hilfsfelder */
 p.start 	{font-size:  9px; color: gray; padding: 2px; margin: 2px; border: 0px;}
-p.nam		{font-size: 10px; border: 1px solid navy; padding: 3px; margin: 0px; color: maroon;}
-p.err		{font-size: 11px; color: red;}	/* Fehler -> Anwender */
-p.dbg		{font-size: 10px; color: gray;}	/* Debug -> Entwickler */
-p.ein, p.anz, p.blt	{font-size: 9px; text-align: right;}	/* Einleitung, Anzahl am Ende, BlÃ€ttern weitere ... */
-p.ein  	{color: navy; font-weight: bold;}
-p.anz, p.blt	{color: purple;}
+p.nam {font-size: 10px; border: 1px solid navy; padding: 3px; margin: 0px; color: maroon;}
+p.err {font-size: 11px; color: red;} /* Fehler -> Anwender */
+p.dbg {font-size: 10px; color: gray;} /* Debug -> Entwickler */
+p.ein, p.anz, p.blt	{font-size: 9px; text-align: right;} /* Einleitung, Anzahl am Ende, BlÃ€ttern weitere ... */
+p.ein  {color: navy; font-weight: bold;}
+p.anz, p.blt {color: purple;}
 
-a			{text-decoration: none;}
-a:hover, a:active	{color: red;}
-a.hislnk {color: gray; font-style: italic; text-align: right; padding-left: 50px;}	/* Link zur Historie */
+a {text-decoration: none;}
+a:hover, a:active {color: red;}
+a.hislnk {color: gray; font-style: italic; text-align: right; padding-left: 50px;} /* Link zur Historie */
 a.hsnro	{color: gray; font-style: italic;} /* HsNr ohne Haus */
-a.blt		{color: maroon; background-color: yellow;} 	/* Link weitere ... */
+a.blt {color: maroon; background-color: yellow;} /* Link weitere ... */
 
 /* abgestuft eingerueckte Treffer in der Suche */
-div			{margin: 0px; padding: 0px;}
-div.back 	{font-size: 10px; color: gray; border-bottom: 1px dotted gray;}
+div {margin: 0px; padding: 0px;}
+div.back {font-size: 10px; color: gray; border-bottom: 1px dotted gray;}
 
-div.ga		{color: fuchsia;	margin-left:  0px; margin-top: 6px;} /* GB-Amtsgericht */
-div.gm		{color: green;		margin-left:  0px; margin-top: 6px;} /* Gemeinde */
+div.ga {color: fuchsia; margin-left: 0px; margin-top: 6px;} /* GB-Amtsgericht */
+div.gm {color: green; margin-left: 0px; margin-top: 6px;} /* Gemeinde */
+div.gk {color: black; margin-left: 7px; margin-top: 6px;} /* Gemarkung o. GB-Bezirk */
+div.pe {color: black; margin-left: 7px; margin-top: 0px;} /* Person, Eigentuemer */
+div.fl {color: olive; margin-left: 17px; margin-top: 4px;} /* Flur ()zw. Gemarkg und Flst.) */
+div.gb {color: green; margin-left: 14px; margin-top: 3px;} /* Grundbuch */
+div.gs {color: olive; margin-left: 21px; margin-top: 2px;} /* Grundstueck, BVNR */
+div.fs {color: navy; margin-left: 28px; margin-top: 0px;} /* Flurstueck */
+div.hi {color: gray; margin-left: 28px; margin-top: 0px;} /* Historie */
+div.hn, p.hn	{color: gray; margin-left: 28px; margin-top: 0px;} /* Historie-Nachfolger */
 
-div.gk		{color: black;		margin-left:  5px; margin-top: 6px;} /* Gemarkung o. GB-Bezirk */
-div.pe		{color: black;		margin-left:  5px; margin-top: 0px;} /* Person, Eigentuemer */
+div.stu {color: maroon; font-size: 13px;} /* Strasse - Ueberschrift */
 
-div.fl		{color: olive;		margin-left: 12px; margin-top: 4px;} /* Flur */
+div.stl {color: maroon; font-size: 11px; margin-top: 3px; margin-left: 7px} /* Strasse - Liste */
 
-div.gb		{color: green;		margin-left: 10px; margin-top: 3px;} /* Grundbuch */
-
-div.gs		{color: olive;		margin-left: 15px; margin-top: 2px;} /* Grundstueck, BVNR */
-
-div.fs		{color: navy;		margin-left: 20px; margin-top: 0px;} /* Flurstueck */
-div.hi		{color: gray;		margin-left: 20px; margin-top: 0px;} /* Historie */
-div.hn, p.hn	{color: gray;		margin-left: 20px; margin-top: 0px;} /* Historie-Nachfolger */
-
-div.stu		{color: maroon; font-size: 13px;} /* Strasse - Ueberschrift */
-div.stl		{color: maroon; font-size: 11px; margin-top: 3px;} /* Strasse - Liste */
-
-td.hsnr		{font-size: 11px; text-align: center; padding-left: 4px; padding-right: 4px;} /* Hausnummer */
-hr				{color: silver; background-color: silver; height: 2px; border: 0px; width: 98%;}
-dfn.title	{color: maroon; font-size: 10px; text-align: right; padding-left: 8px; padding-right: 4px;}
-.aktuell		{background-color: #fdfbd0;}
-.textfield	{border: 1px solid #990000; height: 20px; width: 140px; background: #FFFFFF;}
-.sbutton		{font-size: 11px; font-weight: normal; border: solid 1px #000000; width: 22px; height: 20px; background: #6699FF;}
-img			{border: 0px;} /* Icons */
-img.nwlink	{border: 0px; margin: 0px; padding: 0px;} /* ..mit Link zum Buch-Nachweis */
-.letter		{cursor: pointer; font-weight: bold;} /* Liste Anfangsbuchstaben */
+td.hsnr {font-size: 11px; text-align: center; padding-left: 4px; padding-right: 4px;} /* Hausnummer */
+hr {color: silver; background-color: silver; height: 2px; border: 0px; width: 98%;}
+dfn.title {color: maroon; font-size: 10px; text-align: right; padding-left: 8px; padding-right: 4px;}
+.aktuell {background-color: #fdfbd0;}
+.textfield {border: 1px solid #990000; height: 20px; width: 140px; background: #FFFFFF;}
+.sbutton {font-size: 11px; font-weight: normal; border: solid 1px #000000; width: 22px; height: 20px; background: #6699FF;}
+img {border: 0px;} /* Icons */
+img.nwlink {border: 0px; margin: 0px; padding: 0px;} /* ..mit Link zum Buch-Nachweis */
+.letter {cursor: pointer; font-weight: bold;} /* Liste Anfangsbuchstaben */
 
 /* Registertabs: ul in einem div id='tabs' */
@@ -59,20 +56,11 @@
 	margin-top: 0px; margin-left: 0px; margin-bottom: 20px;
 	padding: 0px; width: 220px; text-align: left; border: 0px dashed #00aa00;}
-div#tabs li {
-	cursor: pointer;
-	list-style: none; /* Eintraege NEBENeinander */
-	float: left;
-	text-align: center;
-	background-color: #F9F9F9;
-	border: 1px solid #CCD5DE;
-	border-bottom-width: 1px;
-	vertical-align: text-bottom;
-	position: relative;
+div#tabs li {cursor: pointer; list-style: none; /* Eintraege NEBENeinander */
+	float: left; text-align: center; background-color: #F9F9F9;
+	border: 1px solid #CCD5DE; border-bottom-width: 1px;
+	vertical-align: text-bottom; position: relative;
 	background-image: url(./img/tab_bg_grau.gif); /* inaktive Tabs grau */
-	background-repeat: repeat-x;
-	background-position: top left;
-	margin: 0 3px 0 0;
-	padding: 2px;
-}
+	background-repeat: repeat-x; background-position: top left;
+	margin: 0 3px 0 0; padding: 2px;}
 div#tabs li.aktiveTab {
 	background-image: url(./img/tab_bg_rot.gif);  /* aktive Tabs rot */
Index: /trunk/mapbender/http/nav/alkisnav_fkt.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 314)
+++ /trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 315)
@@ -3,4 +3,6 @@
 	2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
 	2013-05-14  Hervorhebung aktuelles Objekt, Title auch auf Icon, IE zeigt sonst alt= als Title dar.
+	2013-05-15  Function verlegt
+    2014-02-06  Korrektur zeile_person
 */
 
@@ -168,7 +170,22 @@
 }
 
+function zeile_gemeinde ($gmdnr, $gmdname, $aktuell) {
+	// Eine Zeile zu Gemeinde ausgeben, SchlÃŒssel und Name wird ÃŒbergeben
+	global $gkz, $gemeinde, $epsg;
+	$stadt=htmlentities($gmdname, ENT_QUOTES, "UTF-8");
+	$bez=urlencode($gmdname);
+	if ($aktuell) {$cls=" aktuell";}
+	echo "\n<div class='gm".$cls."' title='Gemeinde'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";
+		echo " Gem. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gm=".$gmdnr."&amp;bez=".$bez."'>";		
+		echo  " ".$stadt."</a> (".$gmdnr.")";
+	echo "\n</div>";
+	return;
+}
+
 function zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur, $aktuell) {
 	// Zeile mit Icon (Link zum Buch-Nachweis) und Text (Link zum Positionieren)
 	global $gkz, $gemeinde, $epsg, $auskpath, $scalefs;
+
 	if ($aktuell) {$cls=" aktuell";}
 	echo "\n<div class='fs".$cls."'>";
@@ -197,12 +214,12 @@
 function zeile_person ($persongml, $nachname, $vorname) {
 	global $gkz, $gemeinde, $epsg, $auskpath;
-	// Zeile  P e r s o n   (oder Firma)
+	// Zeile  P e r s o n (oder Firma)
 	$nnam=htmlentities($nachname, ENT_QUOTES, "UTF-8");
 	$namlnk=urlencode($nachname);
 	$vnam=htmlentities($vorname, ENT_QUOTES, "UTF-8");
-	// Link zur Auskunft Person ++ Icon differenzieren? Firma/Person
+	// Link zur Auskunft Person ++ Icon differenzieren nach Eigentuemerart?
 
 echo "<div class='pe'>
-	<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$gml."\")'>
+	<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$persongml."\")'>
 		<img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG' title='Nachweis'>
 	</a> 		
