Item::Done(Message, Size, Hashes, Cnf);
 
+   // verify the index target
+   if(Target && Target->MetaKey != "" && MetaIndexParser && Hashes.size() > 0)
+   {
+      std::string IndexMetaKey  = Target->MetaKey + ".diff/Index";
+      indexRecords::checkSum *Record = MetaIndexParser->Lookup(IndexMetaKey);
+      if(Record && Record->Hashes.usable() && Hashes != Record->Hashes)
+      {
+         RenameOnError(HashSumMismatch);
+         printHashSumComparision(RealURI, Record->Hashes, Hashes);
+         Failed(Message, Cnf);
+         return;
+      }
+
+   }
+
    string FinalFile;
    FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI);
 
 
    Item::Done(Message, Size, Hashes, Cnf);
 
+   // FIXME: verify this download too before feeding it to rred
+
    string FinalFile;
    FinalFile = _config->FindDir("Dir::State::lists")+"partial/"+URItoFileName(RealURI);
 
 
    Item::Done(Message,Size,Hashes,Cnf);
 
+   // FIXME: verify download before feeding it to rred
+
    string const FinalFile = _config->FindDir("Dir::State::lists") + "partial/" + URItoFileName(RealURI);
 
    if (State == StateFetchDiff)