diff --git a/joj3_config_generator/models/task.py b/joj3_config_generator/models/task.py
index ac0c149..7af9cdf 100644
--- a/joj3_config_generator/models/task.py
+++ b/joj3_config_generator/models/task.py
@@ -220,6 +220,11 @@ class Task(BaseModel):
     name: str = "unknown"
 
 
+class Penalties(BaseModel):
+    hours: List[float] = []
+    factors: List[float] = []
+
+
 class Config(BaseModel):
     root: Path = Path(".")
     path: Path = Path("task.toml")
@@ -228,6 +233,7 @@ class Config(BaseModel):
     release: Release = Release()  # Release configuration
     stages: List[Stage] = []  # list of stage configurations
     groups: Groups = Groups()
+    penalties: Penalties = Penalties()
     max_total_score: Optional[int] = Field(
         None, validation_alias=AliasChoices("max-total-score", "max_total_score")
     )
diff --git a/joj3_config_generator/transformers/repo.py b/joj3_config_generator/transformers/repo.py
index 53676db..691a7a8 100644
--- a/joj3_config_generator/transformers/repo.py
+++ b/joj3_config_generator/transformers/repo.py
@@ -41,6 +41,21 @@ def get_teapot_post_stage(
     ]
     if not repo_conf.submitter_in_issue_title:
         args.append("--no-submitter-in-issue-title")
+    if task_conf.time.end:
+        args.extend(
+            [
+                "--end-time",
+                task_conf.time.end.strftime("%Y-%m-%dT%H:%M:%S"),
+            ]
+        )
+    if task_conf.penalties.hours:
+        penalty_config = ",".join(
+            f"{hour}={factor}"
+            for hour, factor in zip(
+                task_conf.penalties.hours, task_conf.penalties.factors
+            )
+        )
+        args.extend(["--penalty-config", penalty_config])
 
     stage_conf = result.StageDetail(
         name="teapot",
@@ -118,6 +133,14 @@ def get_teapot_check_args(repo_conf: repo.Config, task_conf: task.Config) -> Lis
         res.extend(["--begin-time", task_conf.time.begin.strftime("%Y-%m-%dT%H:%M:%S")])
     if task_conf.time.end:
         res.extend(["--end-time", task_conf.time.end.strftime("%Y-%m-%dT%H:%M:%S")])
+    if task_conf.penalties.hours:
+        penalty_config = ",".join(
+            f"{hour}={factor}"
+            for hour, factor in zip(
+                task_conf.penalties.hours, task_conf.penalties.factors
+            )
+        )
+        res.extend(["--penalty-config", penalty_config])
     return res
 
 
diff --git a/tests/convert/basic/task.json b/tests/convert/basic/task.json
index 9b28298..b124ea2 100644
--- a/tests/convert/basic/task.json
+++ b/tests/convert/basic/task.json
@@ -78,7 +78,9 @@
                                     "--group-config",
                                     "Manuel=500:24,Boming=501:48,Nuvole=502:72",
                                     "--end-time",
-                                    "2024-12-30T23:59:59"
+                                    "2024-12-30T23:59:59",
+                                    "--penalty-config",
+                                    "24.0=0.5,48.0=0.25,72.0=0.1"
                                 ],
                                 "env": [
                                     "REPOS_DIR=/home/tt/.cache",
@@ -808,7 +810,11 @@
                                 "--grading-repo-name",
                                 "ece280-joj",
                                 "--max-total-score",
-                                "10245871"
+                                "10245871",
+                                "--end-time",
+                                "2024-12-30T23:59:59",
+                                "--penalty-config",
+                                "24.0=0.5,48.0=0.25,72.0=0.1"
                             ],
                             "env": [
                                 "REPOS_DIR=/home/tt/.cache",
diff --git a/tests/convert/basic/task.toml b/tests/convert/basic/task.toml
index 541a8be..533d50e 100644
--- a/tests/convert/basic/task.toml
+++ b/tests/convert/basic/task.toml
@@ -5,6 +5,10 @@ max-total-score = 10245871
 time.end = 2024-12-30 23:59:59+08:00
 release.begin-time = 2024-12-29 23:59:59+08:00
 
+[penalties]
+hours = [ 24, 48, 72 ]
+factors = [ 0.5, 0.25, 0.1 ]
+
 [groups]
 name = ["Manuel", "Boming", "Nuvole"]
 max-count = [500, 501, 502]