diff --git a/Makefile b/Makefile
index 0c28c5b32cf56b4b13368d7d74fce0a1bf9b3817..cab6622c18f87c49b7b3db7dce7cb7f8281220c3 100644
--- a/Makefile
+++ b/Makefile
@@ -64,10 +64,10 @@ start-tunnel:
 
 
 release-autograde:
-	docker buildx build --platform linux/amd64,linux/arm64 --push -t autograde/autograde-service:1.0.3 autograde-service/
+	docker buildx build --platform linux/amd64,linux/arm64 --push -t autograde/autograde-service:1.0.4 autograde-service/
 
 release-moodle:
-	docker buildx build --platform linux/amd64,linux/arm64 --push -t autograde/moodle:1.0.3 -f Dockerfile-moodle-with-autograde ./
+	docker buildx build --platform linux/amd64,linux/arm64 --push -t autograde/moodle:1.0.4 -f Dockerfile-moodle-with-autograde ./
 
 release-submission-manager:
-	docker buildx build --platform linux/amd64,linux/arm64 --push -t autograde/submission-manager:1.0.3 autograde-submission-manager/
+	docker buildx build --platform linux/amd64,linux/arm64 --push -t autograde/submission-manager:1.0.4 autograde-submission-manager/
diff --git a/autograde-service/pom.xml b/autograde-service/pom.xml
index cca7c7a5c047e5cd0f867cb350b93cd763eb5606..5b4cefaf113be837f1f46f701cef684e91d4beb3 100644
--- a/autograde-service/pom.xml
+++ b/autograde-service/pom.xml
@@ -13,7 +13,7 @@
 	<!-- HR : Project definition-->
 	<groupId>ch.epfl.autograde</groupId>
 	<artifactId>autograde-service</artifactId>
-	<version>1.0.3</version>
+	<version>1.0.4</version>
 	<name>autograde-service</name>
 
 	<description>
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/AutogradeServiceApplication.java b/autograde-service/src/main/java/ch/epfl/autograde/AutogradeServiceApplication.java
index 5d854418151d33993be8a93eeff4d4a488db7c38..f70b887122fee9ec2aa6b842a3b2684f2b0670f3 100644
--- a/autograde-service/src/main/java/ch/epfl/autograde/AutogradeServiceApplication.java
+++ b/autograde-service/src/main/java/ch/epfl/autograde/AutogradeServiceApplication.java
@@ -1,10 +1,8 @@
 package ch.epfl.autograde;
 
-import ch.epfl.autograde.config.properties.AutogradeConfigProperties;
-import ch.epfl.autograde.config.properties.MoodleConfigProperties;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
 
 /**
  * ???
@@ -12,7 +10,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
  * @author Hamza REMMAL (hamza.remmal@epfl.ch)
  */
 @SpringBootApplication
-@EnableConfigurationProperties({AutogradeConfigProperties.class, MoodleConfigProperties.class})
+@ConfigurationPropertiesScan
 public class AutogradeServiceApplication {
 
 	/**
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/api/v1/model/ImagePullPolicy.java b/autograde-service/src/main/java/ch/epfl/autograde/api/v1/model/ImagePullPolicy.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc466ec6a390734f4945ff43b2d7183254d02d65
--- /dev/null
+++ b/autograde-service/src/main/java/ch/epfl/autograde/api/v1/model/ImagePullPolicy.java
@@ -0,0 +1,12 @@
+package ch.epfl.autograde.api.v1.model;
+
+/**
+ *
+ * @since 1.1.0
+ * @see <a href="https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy">Kubernetes Official Documentation</a>
+ */
+public enum ImagePullPolicy {
+    Never,
+    Always,
+    IfNotPresent
+}
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/AutogradeService.java b/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/AutogradeService.java
index 5155e30250aaf3a269438eb3b3aaf975daa8318e..78f106137322a547e92e88f6ed4a9475a0af4e3d 100644
--- a/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/AutogradeService.java
+++ b/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/AutogradeService.java
@@ -1,6 +1,6 @@
 package ch.epfl.autograde.api.v1.service;
 
-import ch.epfl.autograde.config.properties.AutogradeConfigProperties;
+import ch.epfl.autograde.properties.AutogradeConfigProperties;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/KubernetesJobService.java b/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/KubernetesJobService.java
index 76e1b812f72d847bfc1e997054f1b6d40397af2d..586e02869bc7667e49ed319bfcf71c8e8a137842 100644
--- a/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/KubernetesJobService.java
+++ b/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/KubernetesJobService.java
@@ -1,15 +1,17 @@
 package ch.epfl.autograde.api.v1.service;
 
 import ch.epfl.autograde.api.v1.entity.SubmissionInfo;
+import ch.epfl.autograde.properties.AutogradeJobConfig;
+import ch.epfl.autograde.properties.AutogradeJobImageConfig;
+import ch.epfl.autograde.properties.AutogradeManagerConfig;
 import ch.epfl.autograde.utils.KubernetesPreprocessor;
 import io.fabric8.kubernetes.api.model.*;
 import io.fabric8.kubernetes.api.model.batch.v1.Job;
 import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder;
 import io.fabric8.kubernetes.api.model.batch.v1.JobSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Map;
@@ -23,6 +25,7 @@ import static java.lang.String.valueOf;
  */
 @Slf4j
 @Service
+@RequiredArgsConstructor
 public final class KubernetesJobService {
 
     /** Client to communicate with the underlying k8s cluster */
@@ -39,7 +42,11 @@ public final class KubernetesJobService {
     private final AutogradeService autograde;
 
     /** Namespace to run the jobs in - where the current instance of autograde lives in */
-    private final String JOBS_NAMESPACE;
+    private final AutogradeJobConfig jobConfig;
+
+    private final AutogradeJobImageConfig jobImageConfig;
+
+    private final AutogradeManagerConfig managerConfig;
 
     /** Enum to represent the different states of a grading job */
     public enum JobStatus {
@@ -53,21 +60,6 @@ public final class KubernetesJobService {
         NOT_FOUND
     }
 
-    @Autowired
-    public KubernetesJobService(KubernetesClient k8s,
-                                KubernetesSecretService secrets,
-                                MoodleWebService moodle,
-                                IntegrityService integrity,
-                                AutogradeService autograde,
-                                @Value("${autograde.jobs.namespace}") String namespace) {
-        this.k8s = k8s;
-        this.secrets = secrets;
-        this.moodle = moodle;
-        this.integrity = integrity;
-        this.autograde = autograde;
-        this.JOBS_NAMESPACE = namespace;
-    }
-
     public String create_grading_submission_job(int id) {
         // Generate the job name
         var jobName = get_job_name(id);
@@ -103,7 +95,7 @@ public final class KubernetesJobService {
             k8s.batch()
                     .v1()
                     .jobs()
-                    .inNamespace(JOBS_NAMESPACE)
+                    .inNamespace(jobConfig.namespace())
                     .resource(job)
                     .create();
         } catch (Exception e) {
@@ -125,7 +117,7 @@ public final class KubernetesJobService {
         var job = k8s.batch()
                 .v1()
                 .jobs()
-                .inNamespace(JOBS_NAMESPACE)
+                .inNamespace(jobConfig.namespace())
                 .withName(jobName)
                 .get();
         if (job == null) {
@@ -191,6 +183,7 @@ public final class KubernetesJobService {
         return new ContainerBuilder()
                 .withName("init")
                 .withImage(autograde.getSubmissionManager())
+                .withImagePullPolicy(managerConfig.pullPolicy().toString())
                 .withCommand("java", "-jar", "autograde-submission-manager.jar",
                         autograde.getUrl(),
                         autograde.api_key(),
@@ -225,7 +218,7 @@ public final class KubernetesJobService {
         return new ContainerBuilder()
                 .withName("grader")
                 .withImage(image_name)
-                .withImagePullPolicy("Always")
+                .withImagePullPolicy(jobImageConfig.pullPolicy().toString())
                 .withVolumeMounts(new VolumeMountBuilder()
                         .withName(volume.getName())
                         .withMountPath("/data")
@@ -257,6 +250,7 @@ public final class KubernetesJobService {
         return new ContainerBuilder()
                 .withName("cleanup")
                 .withImage(autograde.getSubmissionManager())
+                .withImagePullPolicy(managerConfig.pullPolicy().toString())
                 .withCommand("java", "-jar", "autograde-submission-manager.jar",
                         autograde.getUrl(),
                         autograde.api_key(),
@@ -329,7 +323,7 @@ public final class KubernetesJobService {
                                         .build())
                                 .build())
                         .withBackoffLimit(2) // failed jobs can be retried twice
-                        .withTtlSecondsAfterFinished(60 * 60 * 2) // 2 hours
+                        .withTtlSecondsAfterFinished(jobConfig.ttl()) // 2 hours
                         .build())
                 .build();
     }
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/MoodleWebService.java b/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/MoodleWebService.java
index 84014c9f1405675a95612927952d64f61164c6b1..bb7d3fa617c5826e43754631a57a846a28a7b42f 100644
--- a/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/MoodleWebService.java
+++ b/autograde-service/src/main/java/ch/epfl/autograde/api/v1/service/MoodleWebService.java
@@ -3,7 +3,7 @@ package ch.epfl.autograde.api.v1.service;
 import ch.epfl.autograde.api.v1.entity.AssignmentInfo;
 import ch.epfl.autograde.api.v1.entity.MoodleFile;
 import ch.epfl.autograde.api.v1.entity.SubmissionInfo;
-import ch.epfl.autograde.config.properties.MoodleConfigProperties;
+import ch.epfl.autograde.properties.MoodleConfigProperties;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.RequiredArgsConstructor;
@@ -118,7 +118,7 @@ public final class MoodleWebService {
                 "grade", grade,
                 "files", new ObjectMapper().writeValueAsString(feedback)
         );
-        System.out.println(new ObjectMapper().writeValueAsString(feedback));
+
         // HR : Call the moodle web service
         var response = call(FUNCTION_NAME, params, ofString());
         log.info("call to moodle_upload_feedback returned {}", response.body());
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/config/properties/AutogradeConfigProperties.java b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeConfigProperties.java
similarity index 86%
rename from autograde-service/src/main/java/ch/epfl/autograde/config/properties/AutogradeConfigProperties.java
rename to autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeConfigProperties.java
index 86ac1d816aef3ac62ba25113e505ab35afeec04b..82a165d26b7e2e70e80ec6df56a2d7e204241222 100644
--- a/autograde-service/src/main/java/ch/epfl/autograde/config/properties/AutogradeConfigProperties.java
+++ b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeConfigProperties.java
@@ -1,4 +1,4 @@
-package ch.epfl.autograde.config.properties;
+package ch.epfl.autograde.properties;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeJobConfig.java b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeJobConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d3a22ee069de301cf75b6c3c0fdd29dcdf3cc68
--- /dev/null
+++ b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeJobConfig.java
@@ -0,0 +1,9 @@
+package ch.epfl.autograde.properties;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "autograde.job")
+public record AutogradeJobConfig (
+        String namespace,
+        int ttl
+){}
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeJobImageConfig.java b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeJobImageConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..f612b15937b82357fb3ab977216f16716be89cd7
--- /dev/null
+++ b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeJobImageConfig.java
@@ -0,0 +1,9 @@
+package ch.epfl.autograde.properties;
+
+import ch.epfl.autograde.api.v1.model.ImagePullPolicy;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "autograde.job.image")
+public record AutogradeJobImageConfig(
+        ImagePullPolicy pullPolicy
+){}
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeManagerConfig.java b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeManagerConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..675c930685be7f7fcd29624808c8957f9646e245
--- /dev/null
+++ b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeManagerConfig.java
@@ -0,0 +1,11 @@
+package ch.epfl.autograde.properties;
+
+import ch.epfl.autograde.api.v1.model.ImagePullPolicy;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "autograde.manager")
+public record AutogradeManagerConfig(
+        String image,
+        ImagePullPolicy pullPolicy
+) {
+}
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/config/properties/MoodleConfigProperties.java b/autograde-service/src/main/java/ch/epfl/autograde/properties/MoodleConfigProperties.java
similarity index 86%
rename from autograde-service/src/main/java/ch/epfl/autograde/config/properties/MoodleConfigProperties.java
rename to autograde-service/src/main/java/ch/epfl/autograde/properties/MoodleConfigProperties.java
index 67c2a568185db754cc137bf4fbef3697752ca8ae..5edb97d31a98eb6b5f7fe74c709b450463febf90 100644
--- a/autograde-service/src/main/java/ch/epfl/autograde/config/properties/MoodleConfigProperties.java
+++ b/autograde-service/src/main/java/ch/epfl/autograde/properties/MoodleConfigProperties.java
@@ -1,4 +1,4 @@
-package ch.epfl.autograde.config.properties;
+package ch.epfl.autograde.properties;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
diff --git a/autograde-service/src/main/resources/application.properties b/autograde-service/src/main/resources/application.properties
index 402cd77f8c7325fce43e307ac48fd6c84fbf669b..47991e36e26d497d04afa23a774ac66bf90791af 100644
--- a/autograde-service/src/main/resources/application.properties
+++ b/autograde-service/src/main/resources/application.properties
@@ -3,4 +3,23 @@ logging.level.ch.epfl.cs107=${GRADING_SERVICE_LOG_LEVEL:-DEBUG}
 management.endpoint.health.enabled=true
 management.endpoints.web.exposure.include=health
 management.endpoint.health.show-details=always
-autograde.version=@project.version@
\ No newline at end of file
+autograde.version=@project.version@
+
+# To keep it inline with the value in v1.0.1, v1.0.2 and v1.0.3
+# Note: Default in v1.0.0 was 2 days
+autograde.job.ttl=7200
+
+# Renaming of the variable, keeping the old env variable compatibility
+# with v1.0.0, v1.0.1, v1.0.2 and v1.0.3
+# Note: Old name is not a default starting from v1.1.0
+autograde.job.namespace=${AUTOGRADE_JOBS_NAMESPACE}
+
+# Default value to keep it working when migrating from v1.0.0 to v1.0.3
+# Note: Default value starting from v1.2.0 is `if-not-present`
+autograde.job.image.pull-policy=always
+
+# v1.0.0 up to v1.0.3 will default for `always` in case the tag is `latest`
+# and to `if-not-present` otherwise.
+# We choose to default to `if-not-present` since we have never used the `latest` tag
+# Note: v1.2.x will default to `never`
+autograde.manager.pull-policy=ifnotpresent
\ No newline at end of file
diff --git a/autograde-service/src/test/java/ch/epfl/autograde/config/properties/AutogradeConfigPropertiesTest.java b/autograde-service/src/test/java/ch/epfl/autograde/config/properties/AutogradeConfigPropertiesTest.java
index e1ed903d57032add2cd005e6eb2325d04856c485..3c870b8b907c2a928acd1f353c7e6058f651da72 100644
--- a/autograde-service/src/test/java/ch/epfl/autograde/config/properties/AutogradeConfigPropertiesTest.java
+++ b/autograde-service/src/test/java/ch/epfl/autograde/config/properties/AutogradeConfigPropertiesTest.java
@@ -1,5 +1,6 @@
 package ch.epfl.autograde.config.properties;
 
+import ch.epfl.autograde.properties.AutogradeConfigProperties;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/autograde-service/src/test/java/ch/epfl/autograde/config/properties/MoodleConfigPropertiesTest.java b/autograde-service/src/test/java/ch/epfl/autograde/config/properties/MoodleConfigPropertiesTest.java
index 52ff481e84b0ffa6a51a4fc4f010ff39b2c2eccb..e6b1e51cf2a27295daa672b72ee9c3ce23a7ba91 100644
--- a/autograde-service/src/test/java/ch/epfl/autograde/config/properties/MoodleConfigPropertiesTest.java
+++ b/autograde-service/src/test/java/ch/epfl/autograde/config/properties/MoodleConfigPropertiesTest.java
@@ -1,5 +1,6 @@
 package ch.epfl.autograde.config.properties;
 
+import ch.epfl.autograde.properties.MoodleConfigProperties;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/autograde-submission-manager/pom.xml b/autograde-submission-manager/pom.xml
index 153207366036630619e875c5ad4f123d8559460d..1796d05ffdb434f46fcd85e5c02c9303dc37c235 100644
--- a/autograde-submission-manager/pom.xml
+++ b/autograde-submission-manager/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>ch.epfl.autograde</groupId>
     <artifactId>autograde-submission-manager</artifactId>
-    <version>1.0.3</version>
+    <version>1.0.4</version>
 
     <properties>
         <maven.compiler.source>17</maven.compiler.source>
diff --git a/moodle-assignsubmission-autograde/version.php b/moodle-assignsubmission-autograde/version.php
index 31e58f6811cde541072124c7307e642f1b672ad7..68902707e54e67603e083c5117d680cbc938c624 100644
--- a/moodle-assignsubmission-autograde/version.php
+++ b/moodle-assignsubmission-autograde/version.php
@@ -25,10 +25,10 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2024103100; // HR : October 31st, 2024
+$plugin->version   = 2024110400; // HR : November 4th, 2024
 $plugin->requires  = 2022112800; // HR : Moodle 4.1.0 (https://moodledev.io/general/releases#moodle-41-lts)
 $plugin->maturity = MATURITY_STABLE;
-$plugin->release = '1.0.2';
+$plugin->release = '1.0.4';
 $plugin->component = 'assignsubmission_autograde';
 $plugin->dependencies = array(
     'mod_assign' => '2022112800',
diff --git a/pom.xml b/pom.xml
index 1414c7ad643042d37307321f33e025351efda074..94f2c93398445a44c40e8cbcc1bfd8bf1200d80a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
     <!-- HR : Project definition-->
     <groupId>ch.epfl.autograde</groupId>
     <artifactId>autograde</artifactId>
-    <version>1.0.3</version>
+    <version>1.0.4</version>
     <name>autograde</name>
     <packaging>pom</packaging>