diff --git a/build.gradle b/build.gradle
index d73a8a7..5216038 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,62 +1,68 @@
-buildscript {
-    repositories {
+buildscript{
+    repositories{
         mavenCentral()
-        maven {
+        maven{
             name = "forge"
             url = "http://files.minecraftforge.net/maven"
         }
-        maven {
+        maven{
             name = "sonatype"
             url = "https://oss.sonatype.org/content/repositories/snapshots/"
         }
     }
-    dependencies {
+    dependencies{
         classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
     }
 }
 
 apply plugin: 'forge'
 
-version = ""
-group = "chylex.java7check"
-archivesBaseName = "Java7Checker  MC-1.8+  v1.1"
+String archiveSuffix = "  MC-UNIVERSAL  v1.2.jar"
 
-minecraft {
-    version = "1.8-11.14.1.1306"
-    assetDir = "eclipse/assets"
-    mappings = "snapshot_nodoc_20141130"
+minecraft{
+    version = "1.7.10-10.13.4.1492-1.7.10"
+    runDir = "eclipse"
 }
 
-jar {
-    manifest {
-        attributes 'FMLCorePlugin': 'chylex.javacheck.Java7CheckerCoremod'
-    }
-}
-
-task java8Jar(type: Jar, dependsOn: "jar") {
+task java7Jar(type: Jar, dependsOn: "jar"){
     from sourceSets.main.output
     
-    manifest {
-        attributes 'FMLCorePlugin': 'chylex.javacheck.Java8CheckerCoremod'
+    manifest{
+        attributes 'TweakClass': 'chylex.javacheck.Java7Checker'
     }
     
-    baseName = "Java8Checker  MC-1.8+  v1.1"
+    archiveName = "Java7Checker"+archiveSuffix
 }
 
-reobf {
-    reobf java8Jar { classpath -> classpath = configurations.compile }
+task java8Jar(type: Jar, dependsOn: "jar"){
+    from sourceSets.main.output
+    
+    manifest{
+        attributes 'TweakClass': 'chylex.javacheck.Java8Checker'
+    }
+    
+    archiveName = "Java8Checker"+archiveSuffix
 }
 
-processResources {
+jar.enabled = false
+
+reobf{
+    reobf java7Jar{ classpath -> classpath = configurations.compile }
+    reobf java8Jar{ classpath -> classpath = configurations.compile }
+}
+
+reobf.enabled = false
+
+processResources{
     inputs.property "version", project.version
     inputs.property "mcversion", project.minecraft.version
     
-    from(sourceSets.main.resources.srcDirs) {
+    from(sourceSets.main.resources.srcDirs){
         include 'mcmod.info'
         expand 'version':project.version, 'mcversion':project.minecraft.version
     }
     
-    from(sourceSets.main.resources.srcDirs) {
+    from(sourceSets.main.resources.srcDirs){
         exclude 'mcmod.info'
     }
 }
\ No newline at end of file
diff --git a/src/main/java/chylex/javacheck/Java7Checker.java b/src/main/java/chylex/javacheck/Java7Checker.java
new file mode 100644
index 0000000..d30ad30
--- /dev/null
+++ b/src/main/java/chylex/javacheck/Java7Checker.java
@@ -0,0 +1,27 @@
+package chylex.javacheck;
+import java.io.File;
+import java.util.List;
+import net.minecraft.launchwrapper.ITweaker;
+import net.minecraft.launchwrapper.LaunchClassLoader;
+import org.apache.commons.lang3.JavaVersion;
+import chylex.javacheck.report.JavaCheckerReporter;
+
+public class Java7Checker implements ITweaker{
+	@Override
+	public void injectIntoClassLoader(LaunchClassLoader classLoader){
+		JavaCheckerReporter.run(JavaVersion.JAVA_1_7);
+	}
+	
+	@Override
+	public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile){}
+	
+	@Override
+	public String getLaunchTarget(){
+		return null;
+	}
+	
+	@Override
+	public String[] getLaunchArguments(){
+		return new String[0];
+	}
+}
diff --git a/src/main/java/chylex/javacheck/Java7CheckerCoremod.java b/src/main/java/chylex/javacheck/Java7CheckerCoremod.java
deleted file mode 100644
index bb3f00f..0000000
--- a/src/main/java/chylex/javacheck/Java7CheckerCoremod.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package chylex.javacheck;
-import java.util.Map;
-import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
-import org.apache.commons.lang3.JavaVersion;
-import chylex.javacheck.report.JavaCheckerReporter;
-
-public class Java7CheckerCoremod implements IFMLLoadingPlugin{
-	@Override
-	public String getSetupClass(){
-		JavaCheckerReporter.minVersion = JavaVersion.JAVA_1_7;
-		return "chylex.javacheck.report.JavaCheckerReporter";
-	}
-	
-	@Override public String[] getASMTransformerClass(){ return null; }
-	@Override public String getAccessTransformerClass(){ return null; }
-	@Override public String getModContainerClass(){ return null; }
-	@Override public void injectData(Map<String,Object> data){}
-}
diff --git a/src/main/java/chylex/javacheck/Java8Checker.java b/src/main/java/chylex/javacheck/Java8Checker.java
new file mode 100644
index 0000000..7b14c3a
--- /dev/null
+++ b/src/main/java/chylex/javacheck/Java8Checker.java
@@ -0,0 +1,27 @@
+package chylex.javacheck;
+import java.io.File;
+import java.util.List;
+import net.minecraft.launchwrapper.ITweaker;
+import net.minecraft.launchwrapper.LaunchClassLoader;
+import org.apache.commons.lang3.JavaVersion;
+import chylex.javacheck.report.JavaCheckerReporter;
+
+public class Java8Checker implements ITweaker{
+	@Override
+	public void injectIntoClassLoader(LaunchClassLoader classLoader){
+		JavaCheckerReporter.run(JavaVersion.JAVA_1_8);
+	}
+	
+	@Override
+	public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile){}
+	
+	@Override
+	public String getLaunchTarget(){
+		return null;
+	}
+	
+	@Override
+	public String[] getLaunchArguments(){
+		return new String[0];
+	}
+}
diff --git a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java b/src/main/java/chylex/javacheck/Java8CheckerCoremod.java
deleted file mode 100644
index 5f3b9b3..0000000
--- a/src/main/java/chylex/javacheck/Java8CheckerCoremod.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package chylex.javacheck;
-import java.util.Map;
-import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
-import org.apache.commons.lang3.JavaVersion;
-import chylex.javacheck.report.JavaCheckerReporter;
-
-public class Java8CheckerCoremod implements IFMLLoadingPlugin{
-	@Override
-	public String getSetupClass(){
-		JavaCheckerReporter.minVersion = JavaVersion.JAVA_1_8;
-		return "chylex.javacheck.report.JavaCheckerReporter";
-	}
-
-	@Override public String[] getASMTransformerClass(){ return null; }
-	@Override public String getAccessTransformerClass(){ return null; }
-	@Override public String getModContainerClass(){ return null; }
-	@Override public void injectData(Map<String,Object> data){}
-}
diff --git a/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java b/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java
index 0a91de4..de26230 100644
--- a/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java
+++ b/src/main/java/chylex/javacheck/report/JavaCheckerReporter.java
@@ -1,29 +1,49 @@
 package chylex.javacheck.report;
-import java.util.Map;
+import java.awt.Desktop;
+import java.awt.Font;
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
 import javax.swing.JOptionPane;
-import net.minecraftforge.fml.relauncher.FMLRelaunchLog;
-import net.minecraftforge.fml.relauncher.IFMLCallHook;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkEvent.EventType;
+import javax.swing.event.HyperlinkListener;
 import org.apache.commons.lang3.JavaVersion;
 import org.apache.commons.lang3.SystemUtils;
 
-public final class JavaCheckerReporter implements IFMLCallHook{
-	public static JavaVersion minVersion = null;
-	
-	@Override
-	public Void call() throws Exception{
-		if (!SystemUtils.isJavaVersionAtLeast(minVersion)){
-			FMLRelaunchLog.severe(getConsoleReport());
-			JOptionPane.showMessageDialog(null, "<html>"+getWindowReport()+"</html>","Outdated Java",JOptionPane.ERROR_MESSAGE);
-            		throw new OutdatedJavaException();
+public final class JavaCheckerReporter{
+	public static void run(JavaVersion minVersion){
+		if (minVersion == null || !SystemUtils.isJavaVersionAtLeast(minVersion)){
+			if (minVersion == null)minVersion = JavaVersion.JAVA_1_8;
+			
+			try{
+				Class relaunchLog = findRelaunchLog();
+				if (relaunchLog != null)relaunchLog.getMethod("severe",String.class,Object[].class).invoke(null,getConsoleReport(minVersion),new Object[0]);
+			}catch(Throwable t){}
+			
+			String style = "font-family:Dialog;font-size:12;font-weight:bold";
+			JEditorPane pane = new JEditorPane("text/html","<html><body style='"+style+"'>"+getWindowReport(minVersion)+"</body></html>");
+			pane.setBackground(new JLabel().getBackground());
+			pane.setEditable(false);
+			
+			pane.addHyperlinkListener(new HyperlinkListener(){
+				@Override
+				public void hyperlinkUpdate(HyperlinkEvent e){
+					if (e.getEventType() == EventType.ACTIVATED){
+						try{
+							if (Desktop.isDesktopSupported())Desktop.getDesktop().browse(e.getURL().toURI());
+						}catch(Exception ex){
+							ex.printStackTrace();
+						}
+					}
+				}
+			});
+			
+			JOptionPane.showMessageDialog(null,pane,"Outdated Java",JOptionPane.ERROR_MESSAGE);
+            throw new OutdatedJavaException();
 		}
-		
-		return null;
 	}
-
-	@Override
-	public void injectData(Map<String,Object> data){}
 	
-	static String getConsoleReport(){
+	private static String getConsoleReport(JavaVersion minVersion){
 		return new StringBuilder(242).append("\n")
 		.append("\n!! DO NOT REPORT !!\n\n")
 		.append("One of the mods requires Java "+minVersion.toString()+" or newer, you are using ").append(SystemUtils.JAVA_VERSION).append(".\n")
@@ -33,11 +53,23 @@ public final class JavaCheckerReporter implements IFMLCallHook{
 		.toString();
 	}
 	
-	static String getWindowReport(){
+	private static String getWindowReport(JavaVersion minVersion){
 		return new StringBuilder(230)
 		.append("One of the mods requires Java "+minVersion.toString()+" or newer, you are using ").append(SystemUtils.JAVA_VERSION).append(".<br>")
-		.append("Visit <span style=\"color:red\">https://java.com/download/</span> for the latest version.<br>")
+		.append("Visit <a href=\"https://java.com/download/\"><span style=\"color:blue\">https://java.com/download/</span></a> for the latest version.<br>")
 		.append("Please, uninstall the old version first to prevent further issues.")
 		.toString();
 	}
+	
+	private static Class findRelaunchLog() throws Throwable{
+		try{
+			return Class.forName("cpw.mods.fml.relauncher.FMLRelaunchLog");
+		}catch(ClassNotFoundException e){}
+		
+		try{
+			return Class.forName("net.minecraftforge.fml.relauncher.FMLRelaunchLog");
+		}catch(ClassNotFoundException e){}
+		
+		return null;
+	}
 }
diff --git a/src/main/java/chylex/javacheck/test/JavaCheckerTestMod.java b/src/main/java/chylex/javacheck/test/JavaCheckerTestMod.java
new file mode 100644
index 0000000..c35c6af
--- /dev/null
+++ b/src/main/java/chylex/javacheck/test/JavaCheckerTestMod.java
@@ -0,0 +1,14 @@
+package chylex.javacheck.test;
+import org.apache.commons.lang3.JavaVersion;
+import chylex.javacheck.report.JavaCheckerReporter;
+import cpw.mods.fml.common.Mod;
+import cpw.mods.fml.common.Mod.EventHandler;
+import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+
+@Mod(modid = "JavaCheckerTestMod")
+public class JavaCheckerTestMod{
+	@EventHandler
+	public void onPreInit(FMLPreInitializationEvent e){
+		JavaCheckerReporter.run(null);
+	}
+}