diff --git a/src/Navaids/fix.hxx b/src/Navaids/fix.hxx
index 3804fb4b2..9fd6115c9 100644
--- a/src/Navaids/fix.hxx
+++ b/src/Navaids/fix.hxx
@@ -57,7 +57,7 @@ class FGFix {
 
 public:
 
-    inline FGFix(void) {}
+    inline FGFix(void);
     inline ~FGFix(void) {}
 
     inline string get_ident() const { return ident; }
@@ -68,15 +68,28 @@ public:
 };
 
 
+inline
+FGFix::FGFix()
+  : ident(""),
+    lon(0.0),
+    lat(0.0)
+{
+}
+
+
 inline istream&
 operator >> ( istream& in, FGFix& f )
 {
-    in >> f.ident >> f.lat >> f.lon;
+    in >> f.ident;
+
+    if ( f.ident[0] == '[' )
+        return in >> skipeol;
+
+    in >> f.lat >> f.lon;
 
     // cout << "id = " << f.ident << endl;
 
-    // return in >> skipeol;
-    return in;
+    return in >> skipeol;
 }
 
 
diff --git a/src/Navaids/fixlist.cxx b/src/Navaids/fixlist.cxx
index e3a02a84e..3fa380e4b 100644
--- a/src/Navaids/fixlist.cxx
+++ b/src/Navaids/fixlist.cxx
@@ -47,7 +47,6 @@ FGFixList::~FGFixList( void ) {
 
 // load the navaids and build the map
 bool FGFixList::init( SGPath path ) {
-    FGFix fix;
 
     fixlist.erase( fixlist.begin(), fixlist.end() );
 
@@ -63,36 +62,27 @@ bool FGFixList::init( SGPath path ) {
     in >> skipcomment;
 
 #ifdef __MWERKS__
-
     char c = 0;
-    while ( in.get(c) && c != '\0' && fix.get_ident() != (string)"[End]" ) {
+    while ( in.get(c) && c != '\0' ) {
         in.putback(c);
-        in >> fix;
-	if ( fix.get_ident() != (string)"[End]" ) {
-	    fixlist[fix.get_ident()] = fix;
-	}
-        in >> skipcomment;
-    }
-
-#else
-
-    while ( ! in.eof() && fix.get_ident() != (string)"[End]" ) {
-        in >> fix;
-	/* cout << "id = " << n.get_ident() << endl;
-	cout << " type = " << n.get_type() << endl;
-	cout << " lon = " << n.get_lon() << endl;
-	cout << " lat = " << n.get_lat() << endl;
-	cout << " elev = " << n.get_elev() << endl;
-	cout << " freq = " << n.get_freq() << endl;
- 	cout << " range = " << n.get_range() << endl; */
-	if ( fix.get_ident() != (string)"[End]" ) {
-	    fixlist[fix.get_ident()] = fix;
-	}
-        in >> skipcomment;
-    }
-
+#else	
+    while ( ! in.eof() ) {
 #endif
 
+        FGFix fix;
+        in >> fix;
+        if ( fix.get_ident() == "[End]" ) {
+            break;
+        }
+
+        /* cout << "ident=" << fix.get_ident()
+             << ", lat=" << fix.get_lat()
+             << ", lon=" << fix.get_lon() << endl; */
+
+        fixlist[fix.get_ident()] = fix;
+        in >> skipcomment;
+    }
+    
     return true;
 }