diff --git a/src/main.rs b/src/main.rs
index 77b004d..bcffc4f 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -58,6 +58,8 @@ enum ReviewError{
 	WriteCurrent(std::io::Error),
 	ActionIO(std::io::Error),
 	ReadCurrent(std::io::Error),
+	DeduplicateModified(submissions_api::types::SingleItemError),
+	UploadModified(submissions_api::Error),
 }
 
 struct ReviewConfig{
@@ -103,6 +105,46 @@ async fn review(config:ReviewConfig)->Result<(),ReviewError>{
 				break;
 			}
 		}
+		// default to_script_id is from from_script_id (only changed for replace policy)
+		let mut to_script_id=None;
+		// interpret action
+		let reviewed_policy=match script_action{
+			ScriptActionParseResult::Pass=>{
+				//if current.lua was updated, create an allowed and replace file and set script_action to replace(new_id)
+				let modified_source=tokio::fs::read_to_string("current.lua").await.map_err(ReviewError::ReadCurrent)?;
+				if modified_source==source{
+					submissions_api::types::Policy::Allowed
+				}else{
+					// compute hash
+					let mut hasher=siphasher::sip::SipHasher::new();
+					std::hash::Hasher::write(&mut hasher,source.as_bytes());
+					let hash=std::hash::Hasher::finish(&hasher);
+
+					// check if modified script already exists
+					let maybe_script_response=api.get_script_from_hash(submissions_api::types::HashRequest{
+						hash:format!("{:016x}",hash).as_str(),
+					}).await.map_err(ReviewError::DeduplicateModified)?;
+
+					// write to_script_id, uploading modified script if necessary
+					to_script_id=Some(match maybe_script_response{
+						Some(script_response)=>script_response.ID,
+						None=>api.create_script(submissions_api::types::CreateScriptRequest{
+							Name:script_response.Name.as_str(),
+							Source:modified_source.as_str(),
+							SubmissionID:Some(script_response.SubmissionID),
+						}).await.map_err(ReviewError::UploadModified)?.ID
+					});
+
+					// use replace policy
+					submissions_api::types::Policy::Replace
+				}
+			},
+			ScriptActionParseResult::Block=>submissions_api::types::Policy::Blocked,
+			ScriptActionParseResult::Exit=>break,
+			ScriptActionParseResult::Delete=>submissions_api::types::Policy::Delete,
+		};
+
+		// update policy
 	}
 
 	Ok(())