diff --git a/core/java/src/freenet/support/CPUInformation/CPUID.java b/core/java/src/freenet/support/CPUInformation/CPUID.java
index 223844f1f66551c618763c03c604b23631adfa5c..539449900486bfdc3f1154ebe94de599fa5f10bf 100644
--- a/core/java/src/freenet/support/CPUInformation/CPUID.java
+++ b/core/java/src/freenet/support/CPUInformation/CPUID.java
@@ -232,10 +232,7 @@ public class CPUID {
             return (getExtendedECXCPUFlags() & 0x40) >0; //Extended ECX Bit 6
         }
         public boolean IsC3Compatible() { return false; }
-        public boolean hasX64()
-        {
-            return isX64;
-        } 
+        public boolean hasX64(){ return isX64; } 
     }
 
     protected static class VIAC3Impl extends CPUIDCPUInfo implements CPUInfo {
@@ -253,32 +250,57 @@ public class CPUID {
         protected static boolean isAthlon64Compatible = false;
         protected static boolean isBobcatCompatible = false;
 
-        //AMD-family = getCPUFamily()+getCPUExtendedFamily()
-        //AMD-model = getCPUModel()+getCPUExtendedModel()
-        public boolean IsK6Compatible(){ return isK6Compatible; }
-        public boolean IsK6_2_Compatible(){ return isK6_2_Compatible; }
-        public boolean IsK6_3_Compatible(){ return isK6_3_Compatible; }
-        public boolean IsAthlonCompatible(){ return isAthlonCompatible; }
-        public boolean IsAthlon64Compatible(){ return isAthlon64Compatible; }
-        public boolean IsBobcatCompatible(){ return isBobcatCompatible; }
+        // If modelString != null, the cpu is considered correctly identified.
+        protected static String modelString = null;
+        protected static boolean hasBeenIdentified = false;
+
+        public boolean IsK6Compatible(){ identifyCPU(); return isK6Compatible; }
+        public boolean IsK6_2_Compatible(){ identifyCPU(); return isK6_2_Compatible; }
+        public boolean IsK6_3_Compatible(){ identifyCPU(); return isK6_3_Compatible; }
+        public boolean IsAthlonCompatible(){ identifyCPU(); return isAthlonCompatible; }
+        public boolean IsAthlon64Compatible(){ identifyCPU(); return isAthlon64Compatible; }
+        public boolean IsBobcatCompatible(){ identifyCPU(); return isBobcatCompatible; }
 
         public String getCPUModelString() throws UnknownCPUException
         {
+            identifyCPU();
+            if (modelString != null)
+                return modelString;
+            throw new UnknownCPUException("Unknown AMD CPU; Family="+(getCPUFamily() + getCPUExtendedFamily())+", Model="+(getCPUModel() + getCPUExtendedModel()));
+        }
+        
+        /*
+        * Identifies CPU, can't be used in static constructor due to JNI conflicts.
+        * Has to be manually run after object initialisation.
+        */
+        private synchronized void identifyCPU()
+        {
+            if (hasBeenIdentified)
+                return; // Don't identify twice
+
+        //AMD-family = getCPUFamily()+getCPUExtendedFamily()
+        //AMD-model = getCPUModel()+getCPUExtendedModel()
         //i486 class (Am486, 5x86) 
             if(getCPUFamily() + getCPUExtendedFamily() == 4){
                 switch(getCPUModel() + getCPUExtendedModel()){
                     case 3:
-                        return "486 DX/2";
+                        modelString = "486 DX/2";
+                        break;
                     case 7:
-                        return "486 DX/2-WB";
+                        modelString = "486 DX/2-WB";
+                        break;
                     case 8:
-                        return "486 DX/4";
+                        modelString = "486 DX/4";
+                        break;
                     case 9:
-                        return "486 DX/4-WB";
+                        modelString = "486 DX/4-WB";
+                        break;
                     case 14:
-                        return "Am5x86-WT";
+                        modelString = "Am5x86-WT";
+                        break;
                     case 15:
-                        return "Am5x86-WB";
+                        modelString = "Am5x86-WB";
+                        break;
                 }
             }
             //i586 class (K5/K6/K6-2/K6-III) 
@@ -286,27 +308,36 @@ public class CPUID {
                 isK6Compatible = true;
                 switch(getCPUModel() + getCPUExtendedModel()){
                     case 0:
-                        return "K5/SSA5";
+                        modelString = "K5/SSA5";
+                        break;
                     case 1:
-                        return "K5";
+                        modelString = "K5";
+                        break;
                     case 2:
-                        return "K5";
+                        modelString = "K5";
+                        break;
                     case 3:
-                        return "K5";
+                        modelString = "K5";
+                        break;
                     case 6:
-                        return "K6";
+                        modelString = "K6";
+                        break;
                     case 7:
-                        return "K6";
+                        modelString = "K6";
+                        break;
                     case 8:
                         isK6_2_Compatible = true;
-                        return "K6-2";
+                        modelString = "K6-2";
+                        break;
                     case 9:
                         isK6_2_Compatible = true;
                         isK6_3_Compatible = true;
-                        return "K6-3";
+                        modelString = "K6-3";
+                        break;
                     case 13:
                         isK6_2_Compatible = true;
-                        return "K6-2+ or K6-III+";
+                        modelString = "K6-2+ or K6-III+";
+                        break;
                 }
             }
             //i686 class (Athlon/Athlon XP/Duron/K7 Sempron) 
@@ -317,23 +348,32 @@ public class CPUID {
                 isAthlonCompatible = true;
                 switch(getCPUModel() + getCPUExtendedModel()){
                     case 0:
-                        return "Athlon (250 nm)";
+                        modelString = "Athlon (250 nm)";
+                        break;
                     case 1:
-                        return "Athlon (250 nm)";
+                        modelString = "Athlon (250 nm)";
+                        break;
                     case 2:
-                        return "Athlon (180 nm)";
+                        modelString = "Athlon (180 nm)";
+                        break;
                     case 3:
-                        return "Duron";
+                        modelString = "Duron";
+                        break;
                     case 4:
-                        return "Athlon (Thunderbird)";
+                        modelString = "Athlon (Thunderbird)";
+                        break;
                     case 6:
-                        return "Athlon (Palamino)";
+                        modelString = "Athlon (Palamino)";
+                        break;
                     case 7:
-                        return "Duron (Morgan)";
+                        modelString = "Duron (Morgan)";
+                        break;
                     case 8:
-                        return "Athlon (Thoroughbred)";
+                        modelString = "Athlon (Thoroughbred)";
+                        break;
                     case 10:
-                        return "Athlon (Barton)";
+                        modelString = "Athlon (Barton)";
+                        break;
                 }
             }
             //AMD64 class (A64/Opteron/A64 X2/K8 Sempron/Turion/Second-Generation Opteron/Athlon Neo) 
@@ -346,85 +386,124 @@ public class CPUID {
                 isX64 = true;
                 switch(getCPUModel() + getCPUExtendedModel()){
                     case 4:
-                        return "Athlon 64/Mobile XP-M";
+                        modelString = "Athlon 64/Mobile XP-M";
                     case 5:
-                        return "Athlon 64 FX Opteron";
+                        modelString = "Athlon 64 FX Opteron";
+                        break;
                     case 7:
-                        return "Athlon 64 FX (Sledgehammer S939, 130 nm)";
+                        modelString = "Athlon 64 FX (Sledgehammer S939, 130 nm)";
+                        break;
                     case 8:
-                        return "Mobile A64/Sempron/XP-M";
+                        modelString = "Mobile A64/Sempron/XP-M";
+                        break;
                     case 11:
-                        return "Athlon 64 (Clawhammer S939, 130 nm)";
+                        modelString = "Athlon 64 (Clawhammer S939, 130 nm)";
+                        break;
                     case 12:
-                        return "Athlon 64/Sempron (Newcastle S754, 130 nm)";
+                        modelString = "Athlon 64/Sempron (Newcastle S754, 130 nm)";
+                        break;
                     case 14:
-                        return "Athlon 64/Sempron (Newcastle S754, 130 nm)";
+                        modelString = "Athlon 64/Sempron (Newcastle S754, 130 nm)";
+                        break;
                     case 15:
-                        return "Athlon 64/Sempron (Clawhammer S939, 130 nm)";                    
+                        modelString = "Athlon 64/Sempron (Clawhammer S939, 130 nm)";
+                        break;                    
                     case 18:
-                        return "Sempron (Palermo, 90 nm)";
+                        modelString = "Sempron (Palermo, 90 nm)";
+                        break;
                     case 20:
-                        return "Athlon 64 (Winchester S754, 90 nm)";
+                        modelString = "Athlon 64 (Winchester S754, 90 nm)";
+                        break;
                     case 23:
-                        return "Athlon 64 (Winchester S939, 90 nm)";
+                        modelString = "Athlon 64 (Winchester S939, 90 nm)";
+                        break;
                     case 24:
-                        return "Mobile A64/Sempron/XP-M (Winchester S754, 90 nm)";
+                        modelString = "Mobile A64/Sempron/XP-M (Winchester S754, 90 nm)";
+                        break;
                     case 26:
-                        return "Athlon 64 (Winchester S939, 90 nm)";
+                        modelString = "Athlon 64 (Winchester S939, 90 nm)";
+                        break;
                     case 27:
-                        return "Athlon 64/Sempron (Winchester/Palermo 90 nm)";
+                        modelString = "Athlon 64/Sempron (Winchester/Palermo 90 nm)";
+                        break;
                     case 28:
-                        return "Sempron (Palermo, 90 nm)";
+                        modelString = "Sempron (Palermo, 90 nm)";
+                        break;
                     case 31:
-                        return "Athlon 64/Sempron (Winchester/Palermo, 90 nm)";
+                        modelString = "Athlon 64/Sempron (Winchester/Palermo, 90 nm)";
+                        break;
                     case 33:
-                        return "Dual-Core Opteron (Italy-Egypt S940, 90 nm)";
+                        modelString = "Dual-Core Opteron (Italy-Egypt S940, 90 nm)";
+                        break;
                     case 35:
-                        return "Athlon 64 X2/A64 FX/Opteron (Toledo/Denmark S939, 90 nm)";
+                        modelString = "Athlon 64 X2/A64 FX/Opteron (Toledo/Denmark S939, 90 nm)";
+                        break;
                     case 36:
-                        return "Mobile A64/Turion (Lancaster/Richmond/Newark, 90 nm)";
+                        modelString = "Mobile A64/Turion (Lancaster/Richmond/Newark, 90 nm)";
+                        break;
                     case 37:
-                        return "Opteron (Troy/Athens S940, 90 nm)";
+                        modelString = "Opteron (Troy/Athens S940, 90 nm)";
+                        break;
                     case 39:
-                        return "Athlon 64 (San Diego, 90 nm)";
+                        modelString = "Athlon 64 (San Diego, 90 nm)";
+                        break;
                     case 43:
-                        return "Athlon 64 X2 (Manchester, 90 nm)";
+                        modelString = "Athlon 64 X2 (Manchester, 90 nm)";
+                        break;
                     case 44:
-                        return "Sempron/mobile Sempron (Palermo/Albany/Roma S754, 90 nm)";
+                        modelString = "Sempron/mobile Sempron (Palermo/Albany/Roma S754, 90 nm)";
+                        break;
                     case 47:
-                        return "Athlon 64/Sempron (Venice/Palermo S939, 90 nm)";
+                        modelString = "Athlon 64/Sempron (Venice/Palermo S939, 90 nm)";
+                        break;
                     case 65:
-                        return "Second-Generaton Opteron (Santa Rosa S1207, 90 nm)";
+                        modelString = "Second-Generaton Opteron (Santa Rosa S1207, 90 nm)";
+                        break;
                     case 67:
-                        return "Athlon 64 X2/2nd-gen Opteron (Windsor/Santa Rosa, 90 nm)";
+                        modelString = "Athlon 64 X2/2nd-gen Opteron (Windsor/Santa Rosa, 90 nm)";
+                        break;
                     case 72:
-                        return "Athlon 64 X2/Turion 64 X2 (Windsor/Taylor/Trinidad, 90 nm)";
+                        modelString = "Athlon 64 X2/Turion 64 X2 (Windsor/Taylor/Trinidad, 90 nm)";
+                        break;
                     case 75:
-                        return "Athlon 64 X2 (Windsor, 90 nm)";
+                        modelString = "Athlon 64 X2 (Windsor, 90 nm)";
+                        break;
                     case 76:
-                        return "Mobile A64/mobile Sempron/Turion (Keene/Trinidad/Taylor, 90 nm)";
+                        modelString = "Mobile A64/mobile Sempron/Turion (Keene/Trinidad/Taylor, 90 nm)";
+                        break;
                     case 79:
-                        return "Athlon 64/Sempron (Orleans/Manila AM2, 90 nm)";
+                        modelString = "Athlon 64/Sempron (Orleans/Manila AM2, 90 nm)";
+                        break;
                     case 93:
-                        return "Opteron Gen 2 (Santa Rosa, 90 nm)";
+                        modelString = "Opteron Gen 2 (Santa Rosa, 90 nm)";
+                        break;
                     case 95:
-                        return "A64/Sempron/mobile Sempron (Orleans/Manila/Keene, 90 nm)";
+                        modelString = "A64/Sempron/mobile Sempron (Orleans/Manila/Keene, 90 nm)";
+                        break;
                     case 104:
-                        return "Turion 64 X2 (Tyler S1, 65 nm)";
+                        modelString = "Turion 64 X2 (Tyler S1, 65 nm)";
+                        break;
                     case 107:
-                        return "Athlon 64 X2/Sempron X2/Athlon Neo X2 (Brisbane/Huron, 65 nm)";
+                        modelString = "Athlon 64 X2/Sempron X2/Athlon Neo X2 (Brisbane/Huron, 65 nm)";
+                        break;
                     case 108:
-                        return "A64/Athlon Neo/Sempron/Mobile Sempron (Lima/Huron/Sparta/Sherman, 65 nm)";
+                        modelString = "A64/Athlon Neo/Sempron/Mobile Sempron (Lima/Huron/Sparta/Sherman, 65 nm)";
+                        break;
                     case 111:
-                        return "Neo/Sempron/mobile Sempron (Huron/Sparta/Sherman, 65 nm)";
+                        modelString = "Neo/Sempron/mobile Sempron (Huron/Sparta/Sherman, 65 nm)";
+                        break;
                     case 124:
-                        return "Athlon/Sempron/mobile Sempron (Lima/Sparta/Sherman, 65 nm)";
+                        modelString = "Athlon/Sempron/mobile Sempron (Lima/Sparta/Sherman, 65 nm)";
+                        break;
                     case 127:
-                        return "A64/Athlon Neo/Sempron/mobile Sempron (Lima/Huron/Sparta/Sherman, 65 nm)";
+                        modelString = "A64/Athlon Neo/Sempron/mobile Sempron (Lima/Huron/Sparta/Sherman, 65 nm)";
+                        break;
                     case 193:
-                        return "Athlon 64 FX (Windsor S1207 90 nm)";
+                        modelString = "Athlon 64 FX (Windsor S1207 90 nm)";
+                        break;
                     default: // is this safe?
-                        return "Athlon 64 (unknown)";
+                        modelString = "Athlon 64 (unknown)";
+                        break;
                 }
             }
             //Stars (Phenom II/Athlon II/Third-Generation Opteron/Opteron 4100 & 6100/Sempron 1xx) 
@@ -435,21 +514,28 @@ public class CPUID {
                 isAthlonCompatible = true;
                 isAthlon64Compatible = true;
                 isX64 = true;
-                switch(getCPUModel() + getCPUExtendedModel()){
+                switch(getCPUModel() + getCPUExtendedModel()\t\t){
                     case 2:
-                        return "Phenom / Athlon / Opteron Gen 3 (Barcelona/Agena/Toliman/Kuma, 65 nm)";
+                        modelString = "Phenom / Athlon / Opteron Gen 3 (Barcelona/Agena/Toliman/Kuma, 65 nm)";
+                        break;
                     case 4:
-                        return "Phenom II / Opteron Gen 3 (Shanghai/Deneb/Heka/Callisto, 45 nm)";
-                    case 5:
-                        return "Athlon II X2/X3/X4 (Regor/Rana/Propus AM3, 45 nm)";
+                        modelString = "Phenom II / Opteron Gen 3 (Shanghai/Deneb/Heka/Callisto, 45 nm)";
+                        break;
+                    case 5:270
+                        modelString = "Athlon II X2/X3/X4 (Regor/Rana/Propus AM3, 45 nm)";
+                        break;
                     case 6:
-                        return "Mobile Athlon II/Turion II/Phenom II/Sempron/V-series (Regor/Caspian/Champlain, 45 nm)";
+                        modelString = "Mobile Athlon II/Turion II/Phenom II/Sempron/V-series (Regor/Caspian/Champlain, 45 nm)";
+                        break;
                     case 8:
-                        return "Six-Core Opteron/Opteron 4100 series (Istanbul/Lisbon, 45 nm)";
+                        modelString = "Six-Core Opteron/Opteron 4100 series (Istanbul/Lisbon, 45 nm)";
+                        break;
                     case 9:
-                        return "Opteron 6100 series (Magny-Cours G34, 45 nm)";
+                        modelString = "Opteron 6100 series (Magny-Cours G34, 45 nm)";
+                        break;
                     case 10:
-                        return "Phenom II X4/X6 (Zosma/Thuban AM3, 45 nm)";
+                        modelString = "Phenom II X4/X6 (Zosma/Thuban AM3, 45 nm)";
+                        break;
                 }
             }
             //K8 mobile+HT3 (Turion X2/Athlon X2/Sempron) 
@@ -462,7 +548,8 @@ public class CPUID {
                 isX64 = true;
                 switch(getCPUModel() + getCPUExtendedModel()){
                     case 3:
-                        return "AMD Turion X2/Athlon X2/Sempron (Lion/Sable, 65 nm)";
+                        modelString = "AMD Turion X2/Athlon X2/Sempron (Lion/Sable, 65 nm)";
+                        break;
                 }
             }
             //Bobcat
@@ -476,13 +563,14 @@ public class CPUID {
                 isX64 = true;
                 switch(getCPUModel() + getCPUExtendedModel()){
                     case 1:                    
-                        return "Bobcat APU";
+                        modelString = "Bobcat APU";
+                        break;
                     // Case 3 is uncertain but most likely a Bobcat APU
                     case 3:
-                        return "Bobcat APU";
+                        modelString = "Bobcat APU";
+                        break;
                 }
             }
-            throw new UnknownCPUException("Unknown AMD CPU; Family="+(getCPUFamily() + getCPUExtendedFamily())+", Model="+(getCPUModel() + getCPUExtendedModel()));
         }
     }
 
@@ -495,40 +583,67 @@ public class CPUID {
         protected static boolean isPentium4Compatible = false;
         protected static boolean isAtomCompatible = false;
         protected static boolean isCore2Compatible = false;
-        protected static boolean isCoreiCompatible = false;    
+        protected static boolean isCoreiCompatible = false;
+        
+        // If modelString != null, the cpu is considered correctly identified.
+        protected static String modelString = null;
+        protected static boolean hasBeenIdentified = false;
         
-        public boolean IsPentiumCompatible(){ return isPentiumCompatible; }
-        public boolean IsPentiumMMXCompatible(){ return isPentiumMMXCompatible; }
-        public boolean IsPentium2Compatible(){ return isPentium2Compatible; }
-        public boolean IsPentium3Compatible(){ return isPentium3Compatible; }
-        public boolean IsPentium4Compatible(){ return isPentium4Compatible; }
-        public boolean IsAtomCompatible(){ return isAtomCompatible; }
-        public boolean IsCore2Compatible(){ return isCore2Compatible; }
-        public boolean IsCoreiCompatible(){ return isCoreiCompatible; }    
+        public boolean IsPentiumCompatible(){ identifyCPU(); return isPentiumCompatible; }
+        public boolean IsPentiumMMXCompatible(){ identifyCPU(); return isPentiumMMXCompatible; }
+        public boolean IsPentium2Compatible(){ identifyCPU(); return isPentium2Compatible; }
+        public boolean IsPentium3Compatible(){ identifyCPU(); return isPentium3Compatible; }
+        public boolean IsPentium4Compatible(){ identifyCPU(); return isPentium4Compatible; }
+        public boolean IsAtomCompatible(){ identifyCPU(); return isAtomCompatible; }
+        public boolean IsCore2Compatible(){ identifyCPU(); return isCore2Compatible; }
+        public boolean IsCoreiCompatible(){ identifyCPU(); return isCoreiCompatible; }    
 
         public String getCPUModelString() throws UnknownCPUException
         {
+            identifyCPU();
+            if (modelString != null)
+                return modelString;
+            throw new UnknownCPUException("Unknown Intel CPU; Family="+getCPUFamily()+", Model="+getCPUModel());
+        }
+        
+        /*
+        * Identifies CPU, can't be used as static due to JNI conflicts.
+        * Has to be manually run after object initialisation
+        */
+        private synchronized void identifyCPU()
+        {
+            if (hasBeenIdentified)
+                return; // Don't identify twice
             if (getCPUExtendedModel() == 0){
                 if(getCPUFamily() == 4){
                     switch(getCPUModel()){
                         case 0:
-                            return "486 DX-25/33";
+                            modelString = "486 DX-25/33";
+                            break;
                         case 1:
-                            return "486 DX-50";
+                            modelString = "486 DX-50";
+                            break;
                         case 2:
-                            return "486 SX";
+                            modelString = "486 SX";
+                            break;
                         case 3:
-                            return "486 DX/2";
+                            modelString = "486 DX/2";
+                            break;
                         case 4:
-                            return "486 SL";
+                            modelString = "486 SL";
+                            break;
                         case 5:
-                            return "486 SX/2";
+                            modelString = "486 SX/2";
+                            break;
                         case 7:
-                            return "486 DX/2-WB";
+                            modelString = "486 DX/2-WB";
+                            break;
                         case 8:
-                            return "486 DX/4";
+                            modelString = "486 DX/4";
+                            break;
                         case 9:
-                            return "486 DX/4-WB";
+                            modelString = "486 DX/4-WB";
+                            break;
                     }
                 }
             }
@@ -537,21 +652,28 @@ public class CPUID {
                     isPentiumCompatible = true;
                     switch(getCPUModel()){
                         case 0:
-                            return "Pentium 60/66 A-step";
+                            modelString = "Pentium 60/66 A-step";
+                            break;
                         case 1:
-                            return "Pentium 60/66";
+                            modelString = "Pentium 60/66";
+                            break;
                         case 2:
-                            return "Pentium 75 - 200";
+                            modelString = "Pentium 75 - 200";
+                            break;
                         case 3:
-                            return "OverDrive PODP5V83";
+                            modelString = "OverDrive PODP5V83";
+                            break;
                         case 4:
                             isPentiumMMXCompatible = true;
-                            return "Pentium MMX";
+                            modelString = "Pentium MMX";
+                            break;
                         case 7:
-                            return "Mobile Pentium 75 - 200";
+                            modelString = "Mobile Pentium 75 - 200";
+                            break;
                         case 8:
                             isPentiumMMXCompatible = true;
-                            return "Mobile Pentium MMX";
+                            modelString = "Mobile Pentium MMX";
+                            break;
                     }
                 }
             }
@@ -561,56 +683,69 @@ public class CPUID {
                     isPentiumMMXCompatible = true;
                     switch(getCPUModel()){
                         case 0:
-                            return "Pentium Pro A-step";
+                            modelString = "Pentium Pro A-step";
+                            break;
                         case 1:
-                            return "Pentium Pro";
+                            modelString = "Pentium Pro";
+                            break;
                         case 3:
                             isPentium2Compatible = true;
-                            return "Pentium II (Klamath)";
+                            modelString = "Pentium II (Klamath)";
+                            break;
                         case 5:
                             isPentium2Compatible = true;
-                            return "Pentium II (Deschutes), Celeron (Covington), Mobile Pentium II (Dixon)";
+                            modelString = "Pentium II (Deschutes), Celeron (Covington), Mobile Pentium II (Dixon)";
+                            break;
                         case 6:
                             isPentium2Compatible = true;
-                            return "Mobile Pentium II, Celeron (Mendocino)";
+                            modelString = "Mobile Pentium II, Celeron (Mendocino)";
+                            break;
                         case 7:
                             isPentium2Compatible = true;
                             isPentium3Compatible = true;
-                            return "Pentium III (Katmai)";
+                            modelString = "Pentium III (Katmai)";
+                            break;
                         case 8:
                             isPentium2Compatible = true;
                             isPentium3Compatible = true;
-                            return "Pentium III (Coppermine), Celeron w/SSE";
+                            modelString = "Pentium III (Coppermine), Celeron w/SSE";
+                            break;
                         case 9:
                             isPentium2Compatible = true;
                             isPentium3Compatible = true;
                             isX64 = true;
-                            return "Pentium M (Banias)";
+                            modelString = "Pentium M (Banias)";
+                            break;
                         case 10:
                             isPentium2Compatible = true;
                             isPentium3Compatible = true;
-                            return "Pentium III Xeon (Cascades)";
+                            modelString = "Pentium III Xeon (Cascades)";
+                            break;
                         case 11:
                             isPentium2Compatible = true;
                             isPentium3Compatible = true;
-                            return "Pentium III (130 nm)";
+                            modelString = "Pentium III (130 nm)";
+                            break;
                         case 13:
                             isPentium2Compatible = true;
                             isPentium3Compatible = true;
                             isX64 = true;
-                            return "Core (Yonah)";
+                            modelString = "Core (Yonah)";
+                            break;
                         case 14:
                             isPentium2Compatible = true;
                             isPentium3Compatible = true;
                             isCore2Compatible = true;
                             isX64 = true;
-                            return "Core 2 (Conroe)";
+                            modelString = "Core 2 (Conroe)";
+                            break;
                         case 15:
                             isPentium2Compatible = true;
                             isPentium3Compatible = true;
                             isCore2Compatible = true;
                             isX64 = true;
-                            return "Core 2 (Conroe)";
+                            modelString = "Core 2 (Conroe)";
+                            break;
                     }
                 } else if (getCPUExtendedModel() == 1){
                     isPentiumCompatible = true;
@@ -622,22 +757,27 @@ public class CPUID {
                     isX64 = true;
                     switch(getCPUModel()){
                         case 6:
-                            return "Celeron";
+                            modelString = "Celeron";
+                            break;
                          case 10:
                             isCoreiCompatible = true;
-                             return "Core i7 (45nm)";
+                             modelString = "Core i7 (45nm)";
+                            break;
                          case 12:
                             isAtomCompatible = true;
                             isCore2Compatible = false;
                             isPentium4Compatible = false;
                             isX64 = true;
-                             return "Atom";
+                            modelString = "Atom";
+                            break;
                          case 13:
                             isCoreiCompatible = true;
-                             return "Xeon MP (45nm)";
+                            modelString = "Xeon MP (45nm)";
+                            break;
                         case 14:
                             isCoreiCompatible = true;
-                            return "Core i5/i7 (45nm)";
+                            modelString = "Core i5/i7 (45nm)";
+                            break;
                     }
                 } else if (getCPUExtendedModel() == 2){
                     isPentiumCompatible = true;
@@ -649,15 +789,20 @@ public class CPUID {
                     isX64 = true;
                     switch(getCPUModel()){
                         case 5:
-                            return "Core i3 or i5/i7 mobile (32nm)";
+                            modelString = "Core i3 or i5/i7 mobile (32nm)";
+                            break;
                         case 10:
-                            return "Core i7/i5 (32nm)";
+                            modelString = "Core i7/i5 (32nm)";
+                            break;
                         case 12:
-                            return "Core i7 (32nm)";
+                            modelString = "Core i7 (32nm)";
+                            break;
                         case 14:
-                            return "Xeon MP (45nm)";
+                            modelString = "Xeon MP (45nm)";
+                            break;
                         case 15:
-                            return "Xeon MP (32nm)";
+                            modelString = "Xeon MP (32nm)";
+                            break;
                     }                
                 }
             }
@@ -675,19 +820,25 @@ public class CPUID {
                     isPentium4Compatible = true;
                     switch(getCPUModel()){
                         case 0:
-                            return "Pentium IV (180 nm)";
+                            modelString = "Pentium IV (180 nm)";
+                            break;
                         case 1:
-                            return "Pentium IV (180 nm)";
+                            modelString = "Pentium IV (180 nm)";
+                            break;
                         case 2:
-                            return "Pentium IV (130 nm)";
+                            modelString = "Pentium IV (130 nm)";
+                            break;
                         case 3:
-                            return "Pentium IV (90 nm)";
+                            modelString = "Pentium IV (90 nm)";
+                            break;
                         case 4:
                             isX64 = true;
-                            return "Pentium IV (90 nm)";
+                            modelString = "Pentium IV (90 nm)";
+                            break;
                         case 6:
                             isX64 = true;
-                            return "Pentium IV (65 nm)";
+                            modelString = "Pentium IV (65 nm)";
+                            break;
                     }
                 }
                 if(getCPUExtendedFamily() == 1){
@@ -696,7 +847,6 @@ public class CPUID {
                     }    
                 }
             }
-            throw new UnknownCPUException("Unknown Intel CPU; Family="+getCPUFamily()+", Model="+getCPUModel());
         }
     }