diff --git a/PicPuzzle/src/HintGenerator.java b/PicPuzzle/src/HintGenerator.java
index 48deba73d3acfaac14c23ffd85a0d9fcb7ba260b..4463f41e7b03232531ff348cff66f9675c451ac0 100644
--- a/PicPuzzle/src/HintGenerator.java
+++ b/PicPuzzle/src/HintGenerator.java
@@ -6,7 +6,6 @@ public class HintGenerator {
 		int width = ng.getWidth();
 		int maxHints = height / 2 + 1;
 		int[][] hints = new int[width][maxHints];
-		boolean[][] imageData = ng.getImageData();
 
 		int hintnum = 0;
 		int blackCount = 0;
@@ -14,7 +13,7 @@ public class HintGenerator {
 			hintnum = 0;
 			blackCount = 0;
 			for (int y = 0; y < height; y++) {
-				if (imageData[x][y]) {
+				if (ng.getPixel(x, y)) {
 					blackCount++;
 				} else {
 					if (blackCount != 0) {
@@ -37,7 +36,6 @@ public class HintGenerator {
 		int width = ng.getWidth();
 		int maxHints = width / 2 + 1;
 		int[][] hints = new int[height][maxHints];
-		boolean[][] imageData = ng.getImageData();
 
 		int hintnum = 0;
 		int blackCount = 0;
@@ -46,7 +44,7 @@ public class HintGenerator {
 			hintnum = 0;
 			blackCount = 0;
 			for (int x = 0; x < width; x++) {
-				if (imageData[x][y]) {
+				if (ng.getPixel(x, y)) {
 					blackCount++;
 				} else {
 					if (blackCount != 0) {
diff --git a/PicPuzzle/src/Hints.java b/PicPuzzle/src/Hints.java
new file mode 100644
index 0000000000000000000000000000000000000000..89435d0422587058ca445dc1feebc45f6fb059f4
--- /dev/null
+++ b/PicPuzzle/src/Hints.java
@@ -0,0 +1,99 @@
+
+public class Hints {
+	private int hintWidth;
+	private int maxHints;
+	private int[][] hints;
+	
+	public Hints(Nonogram ng, boolean rows) {
+		if (rows) {
+			generateRowHints(ng);
+		} else {
+			generateColHints(ng);
+		}
+	}
+	
+	private int[][] generateColHints(Nonogram ng) {
+		int height = ng.getHeight();
+		int width = ng.getWidth();
+		hintWidth = width;
+		maxHints = height / 2 + 1;
+		hints = new int[width][maxHints];
+
+		int hintnum = 0;
+		int blackCount = 0;
+		for (int x = 0; x < width; x++) {
+			hintnum = 0;
+			blackCount = 0;
+			for (int y = 0; y < height; y++) {
+				if (ng.getPixel(x, y)) {
+					blackCount++;
+				} else {
+					if (blackCount != 0) {
+						hints[x][hintnum] = blackCount;
+						hintnum++;
+					}
+					blackCount = 0;
+				}
+			}
+			if (blackCount != 0) {
+				hints[x][hintnum] = blackCount;
+			}
+		}
+
+		return hints;
+	}
+
+	private int[][] generateRowHints(Nonogram ng) {
+		int height = ng.getHeight();
+		int width = ng.getWidth();
+		hintWidth = height;
+		maxHints = width / 2 + 1;
+		hints = new int[height][maxHints];
+
+		int hintnum = 0;
+		int blackCount = 0;
+
+		for (int y = 0; y < height; y++) {
+			hintnum = 0;
+			blackCount = 0;
+			for (int x = 0; x < width; x++) {
+				if (ng.getPixel(x, y)) {
+					blackCount++;
+				} else {
+					if (blackCount != 0) {
+						hints[y][hintnum] = blackCount;
+						hintnum++;
+					}
+					blackCount = 0;
+				}
+			}
+			if (blackCount != 0) {
+				hints[y][hintnum] = blackCount;
+			}
+		}
+
+		return hints;
+	}
+	
+	public int getHintWidth() {
+		return hintWidth;
+	}
+	
+	public int getHintCount(int position) {
+		int count = 0;
+		
+		for (int i = 0; i < maxHints; i++) {
+			if (hints[position][i] != 0) {
+				count++;
+			} else {
+				break;
+			}
+		}
+		
+		return count;
+	}
+	
+	public int getHint(int position, int hintNumber) {
+		return hints[position][hintNumber];
+	}
+}
diff --git a/PicPuzzle/src/JunitTest.java b/PicPuzzle/src/JunitTest.java
index 322c9dc56db075061a71698803b276e7e6c9a57a..35e25d3ab0b24642576a318fbad613f64039760b 100644
--- a/PicPuzzle/src/JunitTest.java
+++ b/PicPuzzle/src/JunitTest.java
@@ -71,7 +71,7 @@ public class JunitTest {
 		
 		for (int y = 0; y < test.getHeight(); y++) {
 			for (int x = 0; x < test.getWidth(); x++) {
-				assertEquals(test.getImageData()[y][x],testImageData1[y][x]);
+				assertEquals(test.getPixel(y,x),testImageData1[y][x]);
 			}
 				
 			}
@@ -83,7 +83,7 @@ public class JunitTest {
 		
 		for (int y = 0; y < test2.getHeight(); y++) {
 			for (int x = 0; x < test2.getWidth(); x++) {
-				assertEquals(test2.getImageData()[y][x],testImageData2[y][x]);
+				assertEquals(test2.getPixel(y,x),testImageData2[y][x]);
 			}
 				
 			}
@@ -95,7 +95,7 @@ public class JunitTest {
 		
 		for (int y = 0; y < test3.getHeight(); y++) {
 			for (int x = 0; x < test3.getWidth(); x++) {
-				assertEquals(test3.getImageData()[y][x],testImageData3[y][x]);
+				assertEquals(test3.getPixel(y,x),testImageData3[y][x]);
 			}
 				
 			}
@@ -107,7 +107,7 @@ public class JunitTest {
 		
 		for (int y = 0; y < test4.getHeight(); y++) {
 			for (int x = 0; x < test4.getWidth(); x++) {
-				assertEquals(test4.getImageData()[y][x],testImageData1[y][x]);
+				assertEquals(test4.getPixel(y,x),testImageData1[y][x]);
 			}
 				
 			}
@@ -119,7 +119,7 @@ public class JunitTest {
 		
 		for (int y = 0; y < test5.getHeight(); y++) {
 			for (int x = 0; x < test5.getWidth(); x++) {
-				assertEquals(test5.getImageData()[y][x],testImageData2[y][x]);
+				assertEquals(test5.getPixel(y,x),testImageData2[y][x]);
 			}
 				
 			}
@@ -131,7 +131,7 @@ public class JunitTest {
 		
 		for (int y = 0; y < test6.getHeight(); y++) {
 			for (int x = 0; x < test6.getWidth(); x++) {
-				assertEquals(test6.getImageData()[y][x],testImageData3[y][x]);
+				assertEquals(test6.getPixel(y,x),testImageData3[y][x]);
 			}
 				
 			}
diff --git a/PicPuzzle/src/Main.java b/PicPuzzle/src/Main.java
index 756ff79dc2c303b824755d90f1ad0b313bbe4855..df250c521e9b24e8f9f0d8daea2510fad0ee7f49 100644
--- a/PicPuzzle/src/Main.java
+++ b/PicPuzzle/src/Main.java
@@ -4,38 +4,33 @@ import java.io.IOException;
 public class Main {
 
 	public static void main(String[] args) throws IOException {
-		Nonogram ng = new Nonogram(new File("blue.bmp"));
-		int[][] colHints = HintGenerator.generateColHints(ng);
-		int[][] rowHints = HintGenerator.generateRowHints(ng);
-
-		boolean[][] image = ng.getImageData();
-
-		for (int y = 0; y < ng.getHeight(); y++) {
-			for (int x = 0; x < ng.getWidth(); x++) {
-				if (image[x][y]) {
-					System.out.print("*");
-				} else {
-					System.out.print(" ");
-				}
+		Nonogram ng = new Nonogram(new File("test2.png"));
+		Hints r = new Hints(ng, true);
+		Hints c = new Hints(ng, false);
+		
+		for (int pos = 0; pos < r.getHintWidth(); pos++) {
+			for (int i = 0; i < r.getHintCount(pos); i++) {
+				System.out.print(r.getHint(pos, i) + " ");
 			}
 			System.out.println();
 		}
-
-		for (int ii = 0; ii < ng.getWidth() / 2 + 1; ii++) {
-			for (int i = 0; i < ng.getWidth(); i++) {
-				System.out.print(colHints[i][ii] + " ");
+		
+		for (int pos = 0; pos < c.getHintWidth(); pos++) {
+			for (int i = 0; i < c.getHintCount(pos); i++) {
+				System.out.print(c.getHint(pos, i) + " ");
 			}
 			System.out.println();
 		}
 
-		System.out.println();
-		
-		for (int i = 0; i < ng.getWidth(); i++) {
-			for (int ii = 0; ii < ng.getWidth() / 2 + 1; ii++) {
-				System.out.print(rowHints[i][ii] + " ");
+		for (int y = 0; y < ng.getHeight(); y++) {
+			for (int x = 0; x < ng.getWidth(); x++) {
+				if (ng.getPixel(x, y)) {
+					System.out.print("*");
+				} else {
+					System.out.print(" ");
+				}
 			}
 			System.out.println();
 		}
 	}
-
 }
diff --git a/PicPuzzle/src/Nonogram.java b/PicPuzzle/src/Nonogram.java
index 5082732daf9eed4a8bb9e6e33828a8dbb169bc93..6286e6143823cbb52e60ee26737c83b1d9127deb 100644
--- a/PicPuzzle/src/Nonogram.java
+++ b/PicPuzzle/src/Nonogram.java
@@ -16,6 +16,17 @@ public class Nonogram {
 		loadImage(image);
 	}
 	
+	public Nonogram(int width, int height) {
+		this.width = width;
+		this.height = height;
+		
+		for (int y = 0; y < height; y++) {
+			for (int x = 0; x < width; x++) {
+				imageData[x][y] = false;
+			}
+		}
+	}
+	
 	private int fixRGB(int rgb) {
 		if (((rgb & 0x00FF0000) > 0x00F00000) && ((rgb & 0x0000FF00) > 0x0000F000) && ((rgb & 0xFF) > 0xF0)) {
 			return RGB_WHITE;
@@ -43,15 +54,18 @@ public class Nonogram {
 					imageData[x][y] = false;
 					break;
 				default:
-					int l = bi.getRGB(x, y);
 					throw new IOException("Invalid image format");
 				}
 			}
 		}
 	}
+	
+	public void setPixel(int x, int y, boolean value) {
+		imageData[x][y] = value;
+	}
 
-	public boolean[][] getImageData() {
-		return imageData.clone();
+	public boolean getPixel(int x, int y) {
+		return imageData[x][y];
 	}
 	
 	public int getWidth() {
@@ -61,4 +75,16 @@ public class Nonogram {
 	public int getHeight() {
 		return height;
 	}
+	
+	public boolean equals(Nonogram n2) {
+		for (int y = 0; y < height; y++) {
+			for (int x = 0; x < width; x++) {
+				if (imageData[x][y] != n2.imageData[x][y]) {
+					return false;
+				}
+			}
+		}
+		
+		return true;
+	}
 }