diff --git a/src/server/dbck.c b/src/server/dbck.c
index 844d0bd74ca39f9629944c3dce5a4f6498fe5ddb..c3b34ee3b764f6d8459bd8c89e33f8e8f7bfdee5 100644
--- a/src/server/dbck.c
+++ b/src/server/dbck.c
@@ -1,5 +1,5 @@
 /*
- * $Id: dbck.c,v 0.70 2002/10/31 09:31:06 ceder Exp $
+ * $Id: dbck.c,v 0.71 2002/11/06 18:40:20 ceder Exp $
  * Copyright (C) 1991-2002  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -805,9 +805,12 @@ check_membership(Pers_no pno,
 {
     int errors=0;
     Conference *conf;
-    int i;
     Local_text_no last=0;
     Member *mem;
+    struct read_range *begin;
+    struct read_range *end;
+    struct read_range *ptr;
+    
     
     conf = cached_get_conf_stat(mship->conf_no);
     if ( conf == NULL )
@@ -819,30 +822,56 @@ check_membership(Pers_no pno,
     else
     {
 	/* Check read texts */
-	if (mship->last_text_read >= l2g_first_appendable_key(&conf->texts))
-	{
-	    kom_log("Person %lu %s %lu in conf %lu, which only has %lu texts.\n",
-		(unsigned long)pno,
-		"has read text",
-		(unsigned long)mship->last_text_read,
-		(unsigned long)mship->conf_no,
-		(unsigned long)(l2g_first_appendable_key(&conf->texts) -1));
-	    errors++;
-	}
 
-	for ( last = i = 0; i < mship->no_of_read; i++)
+	last = 0;
+	if (mship->no_of_read_ranges > 0)
 	{
-	    if ( mship->read_texts[i] <= last )
+	    begin = &mship->read_ranges[0];
+	    end = begin + mship->no_of_read_ranges;
+
+	    for (ptr = begin; ptr < end; ptr++)
 	    {
-		kom_log("Person %lu's membership in %lu %s %lu<%lu> <= %lu.\n",
-		    (unsigned long)pno, (unsigned long)mship->conf_no,
-		    "is corrupt: read text number",
-		    (unsigned long)mship->read_texts[i], (unsigned long)i,
-		    (unsigned long)last);
-		errors++;
+		if (ptr->first_read > ptr->last_read)
+		{
+		    kom_log("Person %lu's membership in %lu is corrupt: "
+			    "bad range: %lu-%lu.\n",
+			    (unsigned long)pno, (unsigned long)mship->conf_no,
+			    (unsigned long)ptr->first_read,
+			    (unsigned long)ptr->last_read);
+		    errors++;
+		}
+		if (ptr != begin && last + 1 == ptr->first_read)
+		{
+		    kom_log("Person %lu's membership in %lu is corrupt: "
+			    "adjoining ranges not joined at around %lu.\n",
+			    (unsigned long)pno, (unsigned long)mship->conf_no,
+			    (unsigned long)ptr->first_read);
+		    errors++;
+		}
+		if (ptr != begin && last >= ptr->first_read)
+		{
+		    kom_log("Person %lu's membership in %lu is corrupt: "
+			    "overlapping ranges: %lu-%lu, %lu-%lu.\n",
+			    (unsigned long)pno, (unsigned long)mship->conf_no,
+			    (unsigned long)(ptr-1)->first_read,
+			    (unsigned long)(ptr-1)->last_read,
+			    (unsigned long)ptr->first_read,
+			    (unsigned long)ptr->last_read);
+		    errors++;
+		}
+		last = ptr->last_read;
 	    }
-
-	    last = mship->read_texts[i];
+	}
+	
+	if (last >= l2g_first_appendable_key(&conf->texts))
+	{
+	    kom_log("Person %lu has read text %lu in conf %lu, "
+		    "which only has %lu texts.\n",
+		    (unsigned long)pno,
+		    (unsigned long)last,
+		    (unsigned long)mship->conf_no,
+		    (unsigned long)(l2g_first_appendable_key(&conf->texts)-1));
+	    errors++;
 	}
 
 	/* Check that he is a member */