diff --git a/aegisub/auto4_perl.cpp b/aegisub/auto4_perl.cpp
index d35cdfa35ece4b9d5123329bc947696b15e31d33..f7b6d6bc3589db5a161bc3bc9026387072df7555 100644
--- a/aegisub/auto4_perl.cpp
+++ b/aegisub/auto4_perl.cpp
@@ -57,8 +57,8 @@ namespace Automation4 {
 // Perl -> C++ interface (XSUBS)
 //
 
-  /* Aegisub */
-  XS(perl_log)  // Aegisub::log()
+  /* package Aegisub */
+  XS(perl_log)
   {
 	wxTRACE_FUNC(Aegisub::log);
 	dXSARGS;
@@ -74,7 +74,7 @@ namespace Automation4 {
 	PerlLog(level, msg);
   }
 
-  XS(perl_warning)  // Aegisub::warn()
+  XS(perl_warning)
   {
 	wxTRACE_FUNC(Aegisub::warn);
 	dXSARGS;
@@ -87,7 +87,7 @@ namespace Automation4 {
   }
 
 
-  XS(perl_text_extents)  // Aegisub::text_extents
+  XS(perl_text_extents)
   {
 	wxTRACE_FUNC(Aegisub::text_extents);
 	dXSARGS;
diff --git a/aegisub/auto4_perl_ass.cpp b/aegisub/auto4_perl_ass.cpp
index 009e3aab0ea2888d9d0592b145fd1525a559a1c0..3e1c6d252e3827fdc5e5fca1e004a7bd767bc034 100644
--- a/aegisub/auto4_perl_ass.cpp
+++ b/aegisub/auto4_perl_ass.cpp
@@ -84,16 +84,14 @@ namespace Automation4 {
 	case ENTRY_ATTACHMENT: return _T("attachment");
 	default:
 	case ENTRY_BASE:
-	  wxString data(entry->GetEntryData());
-	  if(entry->group == _T("[Script Info]") && data.Matches(_T("*:*"))) return _T("info"); 
-		
-	  if(data == entry->group) return _T("head");
-	  
-	  if(data.StartsWith(_T("Format:"))) return _T("format");
-	  
-	  if(data.IsEmpty()) return _T("clear");
-	  
+	  wxString data(entry->GetEntryData());	  
 	  if(data.Trim(left).StartsWith(_T(";"))) return _T("comment");
+	  else {
+		if(entry->group == _T("[Script Info]") && data.Matches(_T("*:*"))) return _T("info");
+		if(data == entry->group) return _T("head");
+		if(data.StartsWith(_T("Format:"))) return _T("format");
+		if(data.IsEmpty()) return _T("clear");
+	  }
 	}
 
 	// Fallback
diff --git a/aegisub/auto4_perl_script.cpp b/aegisub/auto4_perl_script.cpp
index 96ed302a2282ca750fc50f8767561ac5bc8c2de9..d87f0eebaa74eac1f0b27e6762e9a24c2f2a6291 100644
--- a/aegisub/auto4_perl_script.cpp
+++ b/aegisub/auto4_perl_script.cpp
@@ -109,6 +109,7 @@ namespace Automation4 {
 
 	// 'Enclose' the script into its package
 	wxString _script = _T("package ") + package + _T(";\n")
+	  _T("require Aegisub; require Aegisub::Script; require Aegisub::Progress;") // Core modules
 	  _T("our ($_script_reload, $_script_path, $_script_package);\n") // Internal vars
 	  _T("our ($script_name, $script_description, $script_author, $script_version);\n") // Package info
 	  _T("open SCRIPT, $_script_path;\n")  // Open the script file
@@ -118,19 +119,19 @@ namespace Automation4 {
 
 	// Let's eval the 'boxed' script
 	eval_pv(_script.mb_str(wx2pl), 0);
+	SV *_err = newSVsv(ERRSV);  // We need this later
+	// Done running
+	deactivate();
 	// and check on errors
-	if(SvTRUE(ERRSV)) {
-	  description = wxString(SvPV_nolen(ERRSV), pl2wx);
-	  wxLogError(description); // Remove?
+	if(SvTRUE(_err)) {
+	  description = wxString(SvPV_nolen(_err), pl2wx);
+	  //wxLogError(description);  // Remove?
 	  loaded = false;
 	}
 	else {
 	  loaded = true;
 	}
 
-	// The script has done loading (running)
-	deactivate();
-
 	wxTRACE_RET(load);
   }
   
@@ -200,8 +201,8 @@ namespace Automation4 {
 	}
 
 	// Require the core modules
-	load_module(PERL_LOADMOD_NOIMPORT, newSVpvn("Aegisub", 7), NULL);
-	load_module(PERL_LOADMOD_NOIMPORT, newSVpvn("Aegisub::Progress", 17), NULL);
+	//load_module(PERL_LOADMOD_NOIMPORT, newSVpvn("Aegisub", 7), NULL);
+	//load_module(PERL_LOADMOD_NOIMPORT, newSVpvn("Aegisub::Progress", 17), NULL);
 	//load_module(PERL_LOADMOD_NOIMPORT, newSVpvn("Aegisub::Script", 15), NULL);
 
 	// Set the values of script vars