diff --git a/Common/Views.cpp b/Common/Views.cpp
index c36bdc72dec80ed13e7c377158ea9f93843474cc..f4d21614d580f065d9cf77f235e9c2080802c8ba 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,4 +1,4 @@
-/* $Id: Views.cpp,v 1.9 2000-11-27 14:27:34 geuzaine Exp $ */
+/* $Id: Views.cpp,v 1.10 2000-11-27 17:13:39 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "Views.h"
@@ -362,7 +362,7 @@ extern int Force_ViewNumber;
 
 void Read_View(FILE *file, char *filename){
   char   str[NAME_STR_L], name[NAME_STR_L];
-  int    nb, format;
+  int    nb, format, testone, swap=0;
   double version;
 
   while (1) {
@@ -407,48 +407,70 @@ void Read_View(FILE *file, char *filename){
           ActualView->NbST, ActualView->NbVT, ActualView->NbTT, 
           ActualView->NbSS, ActualView->NbVS, ActualView->NbTS);
 
+      if(format == LIST_FORMAT_BINARY){
+	fread(&testone, sizeof(int), 1, file);
+	if(testone != 1){
+	  Msg(INFOS, "Swapping Bytes from Binary File");
+	  swap = 1;
+	}
+      }
+
+      // Time values
       ActualView->Time = List_CreateFromFile(ActualView->NbTimeStep, 
-					     sizeof(double), file, format);
+					     sizeof(double), file, format, swap);
 
+      // Points
       nb = ActualView->NbSP ? 
         ActualView->NbSP * ActualView->NbTimeStep     + ActualView->NbSP * 3 : 0 ;
-      ActualView->SP = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->SP = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
       nb = ActualView->NbVP ?
         ActualView->NbVP * ActualView->NbTimeStep * 3 + ActualView->NbVP * 3 : 0 ;
-      ActualView->VP = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->VP = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
       nb = ActualView->NbTP ? 
         ActualView->NbTP * ActualView->NbTimeStep * 9 + ActualView->NbTP * 3 : 0 ;
-      ActualView->TP = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->TP = List_CreateFromFile(nb, sizeof(double), file, format, swap);
 
+      // Lines
       nb = ActualView->NbSL ? 
         ActualView->NbSL * ActualView->NbTimeStep * 2     + ActualView->NbSL * 6 : 0 ;
-      ActualView->SL = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->SL = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
       nb = ActualView->NbVL ?
         ActualView->NbVL * ActualView->NbTimeStep * 2 * 3 + ActualView->NbVL * 6 : 0 ;
-      ActualView->VL = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->VL = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
       nb = ActualView->NbTL ?
         ActualView->NbTL * ActualView->NbTimeStep * 2 * 9 + ActualView->NbTL * 6 : 0 ;
-      ActualView->TL = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->TL = List_CreateFromFile(nb, sizeof(double), file, format, swap);
 
+      // Triangles
       nb = ActualView->NbST ? 
         ActualView->NbST * ActualView->NbTimeStep * 3     + ActualView->NbST * 9 : 0 ;
-      ActualView->ST = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->ST = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
       nb = ActualView->NbVT ? 
         ActualView->NbVT * ActualView->NbTimeStep * 3 * 3 + ActualView->NbVT * 9 : 0 ;
-      ActualView->VT = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->VT = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
       nb = ActualView->NbTT ? 
         ActualView->NbTT * ActualView->NbTimeStep * 3 * 9 + ActualView->NbTT * 9 : 0 ;
-      ActualView->TT = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->TT = List_CreateFromFile(nb, sizeof(double), file, format, swap);
 
+      // Tetrahedra
       nb = ActualView->NbSS ?
         ActualView->NbSS * ActualView->NbTimeStep * 4     + ActualView->NbSS * 12 : 0 ;
-      ActualView->SS = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->SS = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
       nb = ActualView->NbVS ? 
         ActualView->NbVS * ActualView->NbTimeStep * 4 * 3 + ActualView->NbVS * 12 : 0 ;
-      ActualView->VS = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->VS = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
       nb = ActualView->NbTS ?
         ActualView->NbTS * ActualView->NbTimeStep * 4 * 9 + ActualView->NbTS * 12 : 0 ;
-      ActualView->TS = List_CreateFromFile(nb, sizeof(double), file, format);
+      ActualView->TS = List_CreateFromFile(nb, sizeof(double), file, format, swap);
+
 
       Msg(DEBUG, "Read View '%s' (%d TimeSteps): %d %d %d %d %d %d %d %d %d %d %d %d",
           name, ActualView->NbTimeStep,
diff --git a/DataStr/List.cpp b/DataStr/List.cpp
index c2b541a5f8fc191210080ccf622c8e5a78b3643b..cd3e00b93da02bc8690744f16399af8274e0db23 100644
--- a/DataStr/List.cpp
+++ b/DataStr/List.cpp
@@ -1,4 +1,4 @@
-/* $Id: List.cpp,v 1.7 2000-11-27 10:58:45 geuzaine Exp $ */
+/* $Id: List.cpp,v 1.8 2000-11-27 17:13:42 geuzaine Exp $ */
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -341,7 +341,21 @@ void List_Copy(List_T *a , List_T *b){
   }
 }
 
-List_T *List_CreateFromFile(int n, int size, FILE *file, int format){
+void swap_doubles(double *array, unsigned int n){
+  unsigned int i, c;
+  double x;
+  char *px, *pp;
+  
+  for (i = 0; i < n; i++) {
+    x = array[i];
+    px = (char *) &x;
+    pp = (char *) (array+i);
+    for (c = 0; c < sizeof(double); ++c)
+      pp[sizeof(double)-1-c] = px[c];
+  }
+}
+
+List_T *List_CreateFromFile(int n, int size, FILE *file, int format, int swap){
   int i;
   List_T *liste;
 
@@ -351,10 +365,17 @@ List_T *List_CreateFromFile(int n, int size, FILE *file, int format){
   liste->n = n;
   switch(format){
   case LIST_FORMAT_ASCII :
-    for(i=0;i<n;i++) fscanf(file, "%lf ", (double*)&liste->array[i*size]) ;
+    for(i=0;i<n;i++) fscanf(file, "%lf", (double*)&liste->array[i*size]) ;
     return liste;
   case LIST_FORMAT_BINARY :
     fread(liste->array, size, n, file);
+    if(swap){
+      if(size != sizeof(double)){
+	Msg(ERROR, "Swapping Bytes only done for doubles");
+	return NULL;
+      }
+      swap_doubles((double*)liste->array, n);
+    }
     return liste;
   default :
     Msg(ERROR, "Unknown List Format");
diff --git a/DataStr/List.h b/DataStr/List.h
index 21400802fa623d14ca046402506641edf1ba6747..e161bca2846d0766904c8d31e5ae14574dd07c99 100644
--- a/DataStr/List.h
+++ b/DataStr/List.h
@@ -1,4 +1,4 @@
-/* $Id: List.h,v 1.5 2000-11-27 10:58:45 geuzaine Exp $ */
+/* $Id: List.h,v 1.6 2000-11-27 17:13:42 geuzaine Exp $ */
 #ifndef _LIST_H_
 #define _LIST_H_
 
@@ -46,7 +46,7 @@ void    List_Reset(List_T *liste);
 void    List_Action(List_T *liste, void (*action)(void *data, void *dummy));
 void    List_Action_Inverse(List_T *liste, void (*action)(void *data, void *dummy));
 void    List_Copy(List_T *a , List_T *b);
-List_T *List_CreateFromFile(int n, int size, FILE *file, int format);
+List_T *List_CreateFromFile(int n, int size, FILE *file, int format, int swap);
 void    List_WriteToFile(List_T *liste, FILE *file, int format);
 
 #endif