 		puzzle.moveTo 0, 0
 
 		# Top edge
+		zero = (rectangle.width - rectangle.height) / 2
+		one = zero + rectangle.height
+		half = rectangle.height / 2
+
+		if pieceEdges[i].top is 1
+
+			# Outwards
+			puzzle.lineTo new P.Point zero + 3 * E, 0
+			puzzle.quadraticCurveTo new P.Point(zero + half, 0), new P.Point(zero + 3 * E, -E)
+			puzzle.cubicCurveTo new P.Point(zero + 2 * E, -2 * E), new P.Point(one - 2 * E, -2 * E), new P.Point(one - 3 * E, -E)
+			puzzle.quadraticCurveTo new P.Point(one - half, 0), new P.Point(one - 3 * E, 0)
+
+		else if pieceEdges[i].top is -1
+
+			# Inwards
+			puzzle.lineTo new P.Point zero + 3 * E, 0
+			puzzle.quadraticCurveTo new P.Point(zero + half, 0), new P.Point(zero + 3 * E, E)
+			puzzle.cubicCurveTo new P.Point(zero + 2 * E, 2 * E), new P.Point(one - 2 * E, 2 * E), new P.Point(one - 3 * E, E)
+			puzzle.quadraticCurveTo new P.Point(one - half, 0), new P.Point(one - 3 * E, 0)
+
 		puzzle.lineTo new P.Point W, 0
 		
 		# Right edge

	pieceEdges = [{
		left: 0
		right: 1,
		bottom: -1
	}, {
		left: -1,
		right: -1,
		bottom: 1
	}, {
		left: 1,
		right: -1,
		bottom: -1
	}, {
		left: 1,
		right: 0,
		bottom: -1
	}]

	dropZoneLayer = new P.Layer()
	piecesLayer = new P.Layer()
	pieces = []

	for i in [0..3]

		# An actual puzzle piece shape
		W = rectangle.width

		@size = new P.Size P.view.size.width, .7 * P.view.size.height

	# The rectangle used for the cutout of the pieces
	rectangle = new P.Rectangle 0, 0, P.view.size.width / 3, .7 * P.view.size.height / 3

	###
	Top row
