Index: trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/KernelQMatrix.java
===================================================================
--- trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/KernelQMatrix.java (revision 101)
+++ trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/KernelQMatrix.java (revision 149)
@@ -3,4 +3,5 @@
 import edu.berkeley.compbio.jlibsvm.SolutionVector;
 import edu.berkeley.compbio.jlibsvm.kernel.KernelFunction;
+import org.jetbrains.annotations.NotNull;
 
 import java.util.Arrays;
@@ -22,5 +23,5 @@
 // --------------------------- CONSTRUCTORS ---------------------------
 
-	KernelQMatrix(KernelFunction<P> kernel, int numExamples, int cacheRows)
+	KernelQMatrix(@NotNull KernelFunction<P> kernel, int numExamples, int cacheRows)
 		{
 		this.kernel = kernel;
@@ -134,7 +135,7 @@
 			{
 			return "QMatrix hits = " + hits + ", misses = " + misses + ", widemisses = " + widemisses
-					+ ", diagonalhits = " + diagonalhits + ", diagonalmisses = " + diagonalmisses + ", rate = "
-					+ (float) (hits + diagonalhits) / (float) (hits + diagonalhits + misses + widemisses
-					+ diagonalmisses) + ", size = " + data.length;
+			       + ", diagonalhits = " + diagonalhits + ", diagonalmisses = " + diagonalmisses + ", rate = "
+			       + (float) (hits + diagonalhits) / (float) (hits + diagonalhits + misses + widemisses
+			                                                  + diagonalmisses) + ", size = " + data.length;
 			}
 
Index: trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/BasicKernelQMatrix.java
===================================================================
--- trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/BasicKernelQMatrix.java (revision 69)
+++ trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/BasicKernelQMatrix.java (revision 149)
@@ -3,4 +3,5 @@
 import edu.berkeley.compbio.jlibsvm.SolutionVector;
 import edu.berkeley.compbio.jlibsvm.kernel.KernelFunction;
+import org.jetbrains.annotations.NotNull;
 
 /**
@@ -12,5 +13,5 @@
 // --------------------------- CONSTRUCTORS ---------------------------
 
-	public BasicKernelQMatrix(KernelFunction<P> kernel, int numExamples, int maxCachedRank)
+	public BasicKernelQMatrix(@NotNull KernelFunction<P> kernel, int numExamples, int maxCachedRank)
 		{
 		super(kernel, numExamples, maxCachedRank);
Index: trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/BooleanInvertingKernelQMatrix.java
===================================================================
--- trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/BooleanInvertingKernelQMatrix.java (revision 69)
+++ trunk/src/main/java/edu/berkeley/compbio/jlibsvm/qmatrix/BooleanInvertingKernelQMatrix.java (revision 149)
@@ -3,4 +3,5 @@
 import edu.berkeley.compbio.jlibsvm.SolutionVector;
 import edu.berkeley.compbio.jlibsvm.kernel.KernelFunction;
+import org.jetbrains.annotations.NotNull;
 
 /**
@@ -12,5 +13,5 @@
 // --------------------------- CONSTRUCTORS ---------------------------
 
-	public BooleanInvertingKernelQMatrix(KernelFunction<P> kernel, int numExamples, int maxCachedRank)
+	public BooleanInvertingKernelQMatrix(@NotNull KernelFunction<P> kernel, int numExamples, int maxCachedRank)
 		{
 		super(kernel, numExamples, maxCachedRank);
Index: trunk/src/main/java/edu/berkeley/compbio/jlibsvm/ImmutableSvmParameterGrid.java
===================================================================
--- trunk/src/main/java/edu/berkeley/compbio/jlibsvm/ImmutableSvmParameterGrid.java (revision 102)
+++ trunk/src/main/java/edu/berkeley/compbio/jlibsvm/ImmutableSvmParameterGrid.java (revision 149)
@@ -41,4 +41,8 @@
 			{
 			super(copyFrom);
+
+			//default
+			Cset = new HashSet<Float>();
+			Cset.add(1f);
 			}
 
@@ -46,4 +50,9 @@
 			{
 			super(copyFrom);
+
+			//default
+			//Cset = new HashSet<Float>();
+			//Cset.add(1f);
+
 			//Cset = copyFrom.Cset;
 			//kernelSet = copyFrom.kernelSet;
@@ -59,4 +68,14 @@
 			{
 			ImmutableSvmParameterPoint.Builder<L, P> builder = ImmutableSvmParameterPoint.asBuilder(this);
+
+			if (Cset == null || Cset.isEmpty())
+				{
+				throw new SvmException("Can't build a grid with no C values");
+				}
+
+			if (kernelSet == null || kernelSet.isEmpty())
+				{
+				throw new SvmException("Can't build a grid with no kernels");
+				}
 
 			if (Cset.size() == 1 && kernelSet.size() == 1)
Index: trunk/src/main/java/edu/berkeley/compbio/jlibsvm/ImmutableSvmParameterPoint.java
===================================================================
--- trunk/src/main/java/edu/berkeley/compbio/jlibsvm/ImmutableSvmParameterPoint.java (revision 102)
+++ trunk/src/main/java/edu/berkeley/compbio/jlibsvm/ImmutableSvmParameterPoint.java (revision 149)
@@ -16,5 +16,11 @@
 		super(copyFrom);
 		C = copyFrom.C;
+
 		kernel = copyFrom.kernel;
+
+		if (kernel == null)
+			{
+			throw new SvmException("Can't build a parameter set with no kernel");
+			}
 		}
 
Index: trunk/src/main/java/edu/berkeley/compbio/jlibsvm/legacyexec/svm_toy.java
===================================================================
--- trunk/src/main/java/edu/berkeley/compbio/jlibsvm/legacyexec/svm_toy.java (revision 113)
+++ trunk/src/main/java/edu/berkeley/compbio/jlibsvm/legacyexec/svm_toy.java (revision 149)
@@ -4,5 +4,4 @@
 import edu.berkeley.compbio.jlibsvm.ContinuousModel;
 import edu.berkeley.compbio.jlibsvm.DiscreteModel;
-import edu.berkeley.compbio.jlibsvm.ImmutableSvmParameter;
 import edu.berkeley.compbio.jlibsvm.ImmutableSvmParameterPoint;
 import edu.berkeley.compbio.jlibsvm.MutableSvmProblem;
@@ -16,5 +15,4 @@
 import edu.berkeley.compbio.jlibsvm.kernel.GammaKernel;
 import edu.berkeley.compbio.jlibsvm.kernel.GaussianRBFKernel;
-import edu.berkeley.compbio.jlibsvm.kernel.KernelFunction;
 import edu.berkeley.compbio.jlibsvm.kernel.LinearKernel;
 import edu.berkeley.compbio.jlibsvm.kernel.PolynomialKernel;
@@ -71,5 +69,5 @@
 	byte current_value = 1;
 
-	ImmutableSvmParameter param;
+	ImmutableSvmParameterPoint param;
 
 
@@ -292,5 +290,5 @@
 			}
 
-		ImmutableSvmParameterPoint.Builder paramBuilder = new ImmutableSvmParameterPoint.Builder();
+		ImmutableSvmParameterPoint.Builder paramPointBuilder = new ImmutableSvmParameterPoint.Builder();
 
 		// default values
@@ -300,11 +298,11 @@
 				param.gamma = 0;
 				param.coef0 = 0;*/
-		paramBuilder.nu = 0.5f;
-		paramBuilder.cache_size = 40;
-		paramBuilder.C = 1;
-		paramBuilder.eps = 1e-3f;
-		paramBuilder.p = 0.1f;
-		paramBuilder.shrinking = true;
-		paramBuilder.probability = false;
+		paramPointBuilder.nu = 0.5f;
+		paramPointBuilder.cache_size = 40;
+		paramPointBuilder.C = 1;
+		paramPointBuilder.eps = 1e-3f;
+		paramPointBuilder.p = 0.1f;
+		paramPointBuilder.shrinking = true;
+		paramPointBuilder.probability = false;
 		//param.nr_weight = 0;
 		//param.weightLabel = new int[0];
@@ -355,29 +353,29 @@
 					break;
 				case 'n':
-					paramBuilder.nu = Float.parseFloat(argv[i]);
+					paramPointBuilder.nu = Float.parseFloat(argv[i]);
 					break;
 				case 'm':
-					paramBuilder.cache_size = Float.parseFloat(argv[i]);
+					paramPointBuilder.cache_size = Float.parseFloat(argv[i]);
 					break;
 				case 'c':
-					paramBuilder.C = Float.parseFloat(argv[i]);
+					paramPointBuilder.C = Float.parseFloat(argv[i]);
 					break;
 				case 'e':
-					paramBuilder.eps = Float.parseFloat(argv[i]);
+					paramPointBuilder.eps = Float.parseFloat(argv[i]);
 					break;
 				case 'p':
-					paramBuilder.p = Float.parseFloat(argv[i]);
+					paramPointBuilder.p = Float.parseFloat(argv[i]);
 					break;
 				case 'h':
-					paramBuilder.shrinking = Boolean.parseBoolean(argv[i]);
+					paramPointBuilder.shrinking = Boolean.parseBoolean(argv[i]);
 					break;
 				case 'b':
-					paramBuilder.probability = Boolean.parseBoolean(argv[i]);
+					paramPointBuilder.probability = Boolean.parseBoolean(argv[i]);
 					break;
 				case 'u':
-					paramBuilder.redistributeUnbalancedC = Boolean.parseBoolean(argv[i]);
+					paramPointBuilder.redistributeUnbalancedC = Boolean.parseBoolean(argv[i]);
 					break;
 				case 'w':
-					paramBuilder.putWeight(Integer.parseInt(argv[i - 1].substring(2)), Float.parseFloat(argv[i]));
+					paramPointBuilder.putWeight(Integer.parseInt(argv[i - 1].substring(2)), Float.parseFloat(argv[i]));
 					break;
 				default:
@@ -386,21 +384,21 @@
 			}
 
-		KernelFunction kernel;
+		//final KernelFunction kernel;
 		switch (kernel_type)
 			{
 			case svm_train.LINEAR:
-				kernel = new LinearKernel();
+				paramPointBuilder.kernel = new LinearKernel();
 				break;
 			case svm_train.POLY:
-				kernel = new PolynomialKernel(degree, gamma, coef0);
+				paramPointBuilder.kernel = new PolynomialKernel(degree, gamma, coef0);
 				break;
 			case svm_train.RBF:
-				kernel = new GaussianRBFKernel(gamma);
+				paramPointBuilder.kernel = new GaussianRBFKernel(gamma);
 				break;
 			case svm_train.SIGMOID:
-				kernel = new SigmoidKernel(gamma, coef0);
+				paramPointBuilder.kernel = new SigmoidKernel(gamma, coef0);
 				break;
 			case svm_train.PRECOMPUTED:
-				kernel = new PrecomputedKernel();
+				paramPointBuilder.kernel = new PrecomputedKernel();
 				break;
 			default:
@@ -408,6 +406,7 @@
 			}
 
+
 		SVM svm;
-		param = paramBuilder.build();
+		param = paramPointBuilder.build();
 		switch (svm_type)
 			{
@@ -468,7 +467,7 @@
 		else if (svm_type == svm_train.EPSILON_SVR || svm_type == svm_train.NU_SVR)
 			{
-			if (kernel instanceof GammaKernel && ((GammaKernel) kernel).getGamma() == 0f)
-				{
-				((GammaKernel) kernel).setGamma(1.0f);
+			if (param.kernel instanceof GammaKernel && ((GammaKernel) param.kernel).getGamma() == 0f)
+				{
+				((GammaKernel) param.kernel).setGamma(1.0f);
 				//gamma = 1;
 				}
@@ -512,5 +511,5 @@
 			window_gc.drawLine(0, 0, 0, YLEN - 1);
 
-			int p = (int) (paramBuilder.p * YLEN);
+			int p = (int) (paramPointBuilder.p * YLEN);
 			for (int i = 1; i < XLEN; i++)
 				{
@@ -541,7 +540,7 @@
 		else
 			{
-			if (kernel instanceof GammaKernel && ((GammaKernel) kernel).getGamma() == 0f)
-				{
-				((GammaKernel) kernel).setGamma(0.5f);
+			if (param.kernel instanceof GammaKernel && ((GammaKernel) param.kernel).getGamma() == 0f)
+				{
+				((GammaKernel) param.kernel).setGamma(0.5f);
 				//gamma = 0.5f;
 				}
Index: trunk/src/main/java/edu/berkeley/compbio/jlibsvm/legacyexec/svm_train.java
===================================================================
--- trunk/src/main/java/edu/berkeley/compbio/jlibsvm/legacyexec/svm_train.java (revision 132)
+++ trunk/src/main/java/edu/berkeley/compbio/jlibsvm/legacyexec/svm_train.java (revision 149)
@@ -229,5 +229,7 @@
 					break;
 				case 'c':
+					// override the default
 					builder.Cset = new HashSet<Float>();
+
 					for (String s : argv[i].split(","))
 						{
