diff --git a/pub/lib/mem.cpp b/pub/lib/mem.cpp
index fc3beb975d239140d7d32721eeb3ff605035c739..6c8a0b6a36d0cd70a2e74f45aeb8c6b35a193875 100644
--- a/pub/lib/mem.cpp
+++ b/pub/lib/mem.cpp
@@ -77,6 +77,7 @@ namespace NOlm {
     //! Store file f in online memory. If overwrite and k!=-1, overwrite file k.
     void mem_store( POlo f, int k )
     {
+        f->check_integrity();
         if( overwrite && k!=-1 ){
             // replace file k
             if( k>=MOM.size() )
diff --git a/pub/lib/olf.cpp b/pub/lib/olf.cpp
index 77e910f0e5805234545a92f6e940408cefa333d4..5b5e037d94a0c646b1bb06aab01950de4bb1ae20 100644
--- a/pub/lib/olf.cpp
+++ b/pub/lib/olf.cpp
@@ -59,6 +59,17 @@ string COlo::info_line( int j ) const
 }
 
 
+//! Check integrity, to be called before accepting a new file into online memory.
+
+void COlo::check_integrity() const
+{
+    if( nJ()<1 )
+        throw S("BUG: File has no slices");
+    if( nJ()>1 && nZ()<1 )
+        throw S("BUG: File has several slices but no z coordinate");
+}
+
+
 //! Return value of iz-th z-variable for slice j.
 
 RObj COlo::z( int j, int iz ) const
diff --git a/pub/lib/olf.hpp b/pub/lib/olf.hpp
index 0dfe3612f7169663168f0226a27f90d65ff035d3..b03ba567ac7beafa18cee26da198a7cf37c77498 100644
--- a/pub/lib/olf.hpp
+++ b/pub/lib/olf.hpp
@@ -32,6 +32,7 @@ class COlo {
 
     void remove_z( int iz );
     string info_line( int j ) const;
+    void check_integrity() const;
 
     virtual void copy_mainvec( ROlo fin ) =0;