diff --git a/app/controllers/assessments_controller.rb b/app/controllers/assessments_controller.rb
index d7ee688fc..29c2d34ba 100755
--- a/app/controllers/assessments_controller.rb
+++ b/app/controllers/assessments_controller.rb
@@ -489,6 +489,10 @@ def getAssessmentVariable(key)
   def export
     dir_path = @course.directory_path.to_s
     asmt_dir = @assessment.name
+
+    pld_data = @assessment.calculate_pld.to_yaml
+    gdu_data = @assessment.calculate_gdu.to_yaml
+
     begin
       # Update the assessment config YAML file.
       @assessment.dump_yaml
@@ -500,6 +504,17 @@ def export
         tar.mkdir asmt_dir, File.stat(File.join(dir_path, asmt_dir)).mode
         filter = [@assessment.handin_directory_path]
         @assessment.load_dir_to_tar(dir_path, asmt_dir, tar, filter)
+
+        # Add PLD and GDU data to the tarball as separate files
+        tar.add_file_simple("PLD.yml", 0o644, pld_data.bytesize) do |io|
+          io.write pld_data
+        end
+
+        tar.add_file_simple("GDU.yml", 0o644, gdu_data.bytesize) do |io|
+          io.write gdu_data
+        end
+
+        
       end
       tarStream.rewind
       tarStream.close
diff --git a/app/models/assessment.rb b/app/models/assessment.rb
index 472d804ff..6659c34e4 100755
--- a/app/models/assessment.rb
+++ b/app/models/assessment.rb
@@ -464,6 +464,33 @@ def date_to_s(date)
     date.strftime("%a, %b %e at %l:%M%P")
   end
 
+  # Public method to access the PLD data
+  def calculate_pld
+    submissions.includes(:scores).map do |submission|
+      late_days = [(submission.created_at.to_date - due_at.to_date).to_i, 0].max
+      { submission_id: submission.id, late_days: late_days }
+    end
+  end
+
+  # Public method to access the GDU data
+  def calculate_gdu
+    # Define grade boundaries
+    grade_boundaries = { 'A': 90, 'B': 80, 'C': 70, 'D': 60, 'F': 0 }
+    # Initialize distribution
+    distribution = Hash.new(0)
+
+    total_submissions = submissions.joins(:scores).count
+    submissions.includes(:scores).each do |submission|
+      # Assuming 'score' is a method that sums up scores for a submission
+      score = submission.scores.sum(&:points)
+      grade = grade_boundaries.keys.reverse.detect { |grade| score >= grade_boundaries[grade] }
+      distribution[grade] += 1
+    end
+
+    # Convert counts to percentages
+    distribution.transform_values { |count| (count.to_f / total_submissions * 100).round(2) }
+  end
+
   def load_dir_to_tar(dir_path, asmt_dir, tar, filters = [], export_dir = "")
     Dir[File.join(dir_path, asmt_dir, "**")].each do |file|
       mode = File.stat(file).mode