diff --git a/asdf.lisp b/asdf.lisp
index deadfc300f8d1325147282ed86aabe45f0cf8d46..5bde8d9d7cf3c4905bc374c22c01e97f8a80659a 100644
--- a/asdf.lisp
+++ b/asdf.lisp
@@ -1374,9 +1374,8 @@ Returns the new tree (which probably shares structure with the old one)"
   (loop for name in +asdf-methods+ do
        (let ((keyword (intern (symbol-name name) :keyword)))
 	 (loop for data = rest then (cddr data)
-	      while data
-	      for key = (first data) 
-	      for value = (second data) 
+	      for key = (and data (first data))
+	      for value = (and data (second data)) 
 	      when (eq key keyword) do
 	      (destructuring-bind (op qual (o c) &body body) value
 	      (pushnew
diff --git a/debian/changelog b/debian/changelog
index 80753a098c42474f5433316fa4f8d4984bde673f..2bd196317ebedcf4795d06ef69074c93fc7bd12f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+cl-asdf (1:20090819-2) unstable; urgency=low
+
+  * Fix the loop contruct. This makes ecl fail. (Closes: #545768)
+
+ -- Peter Van Eynde <pvaneynd@debian.org>  Thu, 10 Sep 2009 14:20:11 +0100
+
 cl-asdf (1:20090819-1) unstable; urgency=low
 
   * New upstream, New homepage and new upstream repository.