diff --git a/src/app/project/repository.go b/src/app/project/repository.go
index 671636fbbe512d8560be0f676c5a2fe5c67d1636..efa2098b3e48d8c140b2a59117f546f3f8790b25 100644
--- a/src/app/project/repository.go
+++ b/src/app/project/repository.go
@@ -254,16 +254,23 @@ func (r *MongoProjectRepository) FindWithRequirements(ctx context.Context, id pr
 	// Process each requirement document
 	var requirements []*RequirementSummary
 	for cursor.Next(ctx) {
-		var req RequirementSummary
-		if err := cursor.Decode(&req); err != nil {
+		// First decode into a raw document to access nested fields
+		var doc bson.M
+		if err := cursor.Decode(&doc); err != nil {
 			log.Printf("WARN: Skipping invalid requirement document: %v", err)
-			continue // Skip documents that can't be decoded rather than failing entirely
+			continue
+		}
+
+		// Convert the raw document to RequirementSummary
+		var req RequirementSummary
+		docBytes, _ := bson.Marshal(doc)
+		if err := bson.Unmarshal(docBytes, &req); err != nil {
+			log.Printf("WARN: Failed to convert requirement document: %v", err)
+			continue
 		}
 
 		// Extract additional fields from nested parsing_result if available
 		// This handles requirements that have been processed by the EIFFEL system
-		var doc bson.M
-		cursor.Decode(&doc)
 		if parsingResult, ok := doc["parsing_result"].(bson.M); ok {
 			if requirement, ok := parsingResult["requirement"].(string); ok {
 				req.Requirement = requirement