diff --git a/.cproject b/.cproject
deleted file mode 100644
index a9b81cba15fb871f873ef8acea4b93cc85bf79d9..0000000000000000000000000000000000000000
--- a/.cproject
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
-    	
-    <storageModule moduleId="org.eclipse.cdt.core.settings">
-        		
-        <cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.debug.913981392">
-            			
-            <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.debug.913981392" moduleId="org.eclipse.cdt.core.settings" name="Debug">
-                				
-                <externalSettings/>
-                				
-                <extensions>
-                    					
-                    <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
-                    					
-                    <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                    					
-                    <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                    					
-                    <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                    				
-                </extensions>
-                			
-            </storageModule>
-            			
-            <storageModule moduleId="cdtBuildSystem" version="4.0.0">
-                				
-                <configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.debug.913981392" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="cdt.managedbuild.config.gnu.mingw.exe.debug">
-                    					
-                    <folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.913981392." name="/" resourcePath="">
-                        						
-                        <toolChain id="cdt.managedbuild.toolchain.gnu.mingw.exe.debug.367600360" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.exe.debug">
-                            							
-                            <targetPlatform id="cdt.managedbuild.target.gnu.platform.mingw.exe.debug.1719566759" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.mingw.exe.debug"/>
-                            							
-                            <builder buildPath="${workspace_loc:/constant-workspace-algorithms-c}/Debug" id="cdt.managedbuild.tool.gnu.builder.mingw.base.1519590842" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.assembler.mingw.exe.debug.1137597037" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.exe.debug">
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.assembler.input.2016104599" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-                                							
-                            </tool>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.335209845" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.641152686" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug">
-                                								
-                                <option id="gnu.cpp.compiler.mingw.exe.debug.option.optimization.level.1439991956" name="Optimization Level" superClass="gnu.cpp.compiler.mingw.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
-                                								
-                                <option defaultValue="gnu.cpp.compiler.debugging.level.max" id="gnu.cpp.compiler.mingw.exe.debug.option.debugging.level.2053770429" name="Debug Level" superClass="gnu.cpp.compiler.mingw.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
-                                							
-                            </tool>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.935640154" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug">
-                                								
-                                <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.mingw.exe.debug.option.optimization.level.1319064045" name="Optimization Level" superClass="gnu.c.compiler.mingw.exe.debug.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
-                                								
-                                <option defaultValue="gnu.c.debugging.level.max" id="gnu.c.compiler.mingw.exe.debug.option.debugging.level.1027476309" name="Debug Level" superClass="gnu.c.compiler.mingw.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1918022612" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-                                							
-                            </tool>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.debug.152945588" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.debug">
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.c.linker.input.408418117" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
-                                    									
-                                    <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
-                                    									
-                                    <additionalInput kind="additionalinput" paths="$(LIBS)"/>
-                                    								
-                                </inputType>
-                                							
-                            </tool>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.debug.160074272" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.debug"/>
-                            						
-                        </toolChain>
-                        					
-                    </folderInfo>
-                    				
-                </configuration>
-                			
-            </storageModule>
-            			
-            <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-            		
-        </cconfiguration>
-        		
-        <cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.release.1419934805">
-            			
-            <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.release.1419934805" moduleId="org.eclipse.cdt.core.settings" name="Release">
-                				
-                <externalSettings/>
-                				
-                <extensions>
-                    					
-                    <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
-                    					
-                    <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                    					
-                    <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                    					
-                    <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                    				
-                </extensions>
-                			
-            </storageModule>
-            			
-            <storageModule moduleId="cdtBuildSystem" version="4.0.0">
-                				
-                <configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.release.1419934805" name="Release" optionalBuildProperties="" parent="cdt.managedbuild.config.gnu.mingw.exe.release">
-                    					
-                    <folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.release.1419934805." name="/" resourcePath="">
-                        						
-                        <toolChain id="cdt.managedbuild.toolchain.gnu.mingw.exe.release.1251512435" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.exe.release">
-                            							
-                            <targetPlatform id="cdt.managedbuild.target.gnu.platform.mingw.exe.release.1185331731" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.mingw.exe.release"/>
-                            							
-                            <builder buildPath="${workspace_loc:/constant-workspace-algorithms-c}/Release" id="cdt.managedbuild.tool.gnu.builder.mingw.base.1562345432" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.assembler.mingw.exe.release.80643772" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.exe.release">
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.assembler.input.415193855" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-                                							
-                            </tool>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.97188924" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.release.1624378783" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.release">
-                                								
-                                <option id="gnu.cpp.compiler.mingw.exe.release.option.optimization.level.1807152657" name="Optimization Level" superClass="gnu.cpp.compiler.mingw.exe.release.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
-                                								
-                                <option defaultValue="gnu.cpp.compiler.debugging.level.none" id="gnu.cpp.compiler.mingw.exe.release.option.debugging.level.39620204" name="Debug Level" superClass="gnu.cpp.compiler.mingw.exe.release.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
-                                							
-                            </tool>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.1636892329" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release">
-                                								
-                                <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.mingw.exe.release.option.optimization.level.860990239" name="Optimization Level" superClass="gnu.c.compiler.mingw.exe.release.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
-                                								
-                                <option defaultValue="gnu.c.debugging.level.none" id="gnu.c.compiler.mingw.exe.release.option.debugging.level.148760879" name="Debug Level" superClass="gnu.c.compiler.mingw.exe.release.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1259866239" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-                                							
-                            </tool>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.release.1309107452" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.exe.release">
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.c.linker.input.65027192" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
-                                    									
-                                    <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
-                                    									
-                                    <additionalInput kind="additionalinput" paths="$(LIBS)"/>
-                                    								
-                                </inputType>
-                                							
-                            </tool>
-                            							
-                            <tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.release.2099402939" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.exe.release"/>
-                            						
-                        </toolChain>
-                        					
-                    </folderInfo>
-                    					
-                    <sourceEntries>
-                        						
-                        <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
-                        					
-                    </sourceEntries>
-                    				
-                </configuration>
-                			
-            </storageModule>
-            			
-            <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-            		
-        </cconfiguration>
-        	
-    </storageModule>
-    	
-    <storageModule moduleId="cdtBuildSystem" version="4.0.0">
-        		
-        <project id="constant-workspace-algorithms-c.cdt.managedbuild.target.gnu.mingw.exe.233459410" name="Executable" projectType="cdt.managedbuild.target.gnu.mingw.exe"/>
-        	
-    </storageModule>
-    	
-    <storageModule moduleId="scannerConfiguration">
-        		
-        <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-        		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.913981392;cdt.managedbuild.config.gnu.mingw.exe.debug.913981392.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.935640154;cdt.managedbuild.tool.gnu.c.compiler.input.1918022612">
-            			
-            <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-            		
-        </scannerConfigBuildInfo>
-        		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1419934805;cdt.managedbuild.config.gnu.mingw.exe.release.1419934805.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.1636892329;cdt.managedbuild.tool.gnu.c.compiler.input.1259866239">
-            			
-            <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-            		
-        </scannerConfigBuildInfo>
-        	
-    </storageModule>
-    	
-    <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
-    	
-    <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
-    	
-    <storageModule moduleId="refreshScope"/>
-    
-</cproject>
diff --git a/.gitignore b/.gitignore
index b5c9fbc91dbd05b91dee35875c1ade5cff96fb13..303677732b4237bc3fc80436f1a23d6fd4e31af7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,7 @@
 /html/
 /delaunay.html
 /voronoi.html
+/gmon.out
+/perf.data
+/perf.data.old
+/.cproject
diff --git a/.settings/.gitignore b/.settings/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..d81d4c414cc298fa21635d0b27c126c1b0a7ff3a
--- /dev/null
+++ b/.settings/.gitignore
@@ -0,0 +1 @@
+/language.settings.xml
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
deleted file mode 100644
index c990946f19752387b15cd1dcd505a5b723fa8e2e..0000000000000000000000000000000000000000
--- a/.settings/language.settings.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<project>
-    	
-    <configuration id="cdt.managedbuild.config.gnu.mingw.exe.debug.913981392" name="Debug">
-        		
-        <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
-            			
-            <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
-            			
-            <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
-            			
-            <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-            			
-            <provider class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBuiltinSpecsDetectorMinGW" console="false" env-hash="616115681376380407" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorMinGW" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings MinGW" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
-                				
-                <language-scope id="org.eclipse.cdt.core.gcc"/>
-                				
-                <language-scope id="org.eclipse.cdt.core.g++"/>
-                			
-            </provider>
-            		
-        </extension>
-        	
-    </configuration>
-    	
-    <configuration id="cdt.managedbuild.config.gnu.mingw.exe.release.1419934805" name="Release">
-        		
-        <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
-            			
-            <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
-            			
-            <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
-            			
-            <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-            			
-            <provider class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBuiltinSpecsDetectorMinGW" console="false" env-hash="616115681376380407" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorMinGW" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings MinGW" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
-                				
-                <language-scope id="org.eclipse.cdt.core.gcc"/>
-                				
-                <language-scope id="org.eclipse.cdt.core.g++"/>
-                			
-            </provider>
-            		
-        </extension>
-        	
-    </configuration>
-    
-</project>
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..322e5897a4e89f67dc0bedcc00e3afda97a2878b
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1,4 @@
+/xyz
+/delaunay.html
+/test
+/perf.data
diff --git a/src/delaunay.c b/src/delaunay.c
index 444d850ce5b793ab743d6a3848fff80b25b70ac0..c2883b32ba53e0fbeeab801d61936fcbd6f0ecac 100644
--- a/src/delaunay.c
+++ b/src/delaunay.c
@@ -13,18 +13,6 @@
 
 
 
-/* Draw a full 2*pi period of the sine */
-void create_image ( void )
-{
-    /* Run the width of the image */
-    for ( int x=0; x<W; x++ )
-    {
-        /* Scale the wave to the image height */
-        int y = (H/2) +
-            (H/2) * sin ( 2 * 3.141593 * (x/(double)W) );
-        r[y][x] = 255, g[y][x] = 255, b[y][x] = 255;
-    }
-}
 
 int comparePointsByX (const void * a, const void * b) {
    vertex* pointA = (vertex*) a;
@@ -66,11 +54,12 @@ int drawLine(vertex* p) {
 
 /* Write the ppm-formatted file */
 int reportTriangle(vertex* p, int size, FILE *out) {
-	for(int i = 0; i < size; i++) {
+	for(int i = 0; i < 3; i++) {
 		printVertex(p[i]);
 		printf("; ");
 	}
 	printf("\n");
+
 	qsort (p, size, sizeof(*p), comparePointsByX);
 
 	char *color = "255,0,0";
@@ -167,13 +156,13 @@ void circleThrough3Points(vertex p1, vertex p2, vertex p3, double* circle) {
 circle circle_vvv(vertex v1, vertex v2, vertex v3)
 {
 	circle c;
-    float bx = v1.x; float by = v1.y;
-    float cx = v2.x; float cy = v2.y;
-    float dx = v3.x; float dy = v3.y;
-    float temp = cx*cx+cy*cy;
-    float bc = (bx*bx + by*by - temp)/2.0;
-    float cd = (temp - dx*dx - dy*dy)/2.0;
-    float det = (bx-cx)*(cy-dy)-(cx-dx)*(by-cy);
+    double bx = v1.x; double by = v1.y;
+    double cx = v2.x; double cy = v2.y;
+    double dx = v3.x; double dy = v3.y;
+    double temp = cx*cx+cy*cy;
+    double bc = (bx*bx + by*by - temp)/2.0;
+    double cd = (temp - dx*dx - dy*dy)/2.0;
+    double det = (bx-cx)*(cy-dy)-(cx-dx)*(by-cy);
     if (fabs(det) < 1.0e-6) {
         c.center.x = c.center.y = 1.0;
         return c;
@@ -182,10 +171,30 @@ circle circle_vvv(vertex v1, vertex v2, vertex v3)
     c.center.x = (bc*(cy-dy)-cd*(by-cy))*det;
     c.center.y = ((bx-cx)*cd-(cx-dx)*bc)*det;
     cx = c.center.x; cy = c.center.y;
-    c.radius = sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by));
+    c.radius = distance(v1, c.center);
     return c;
 }
 
+
+double det2(double a, double b, double c, double d) {
+	return a*d-b*c;
+}
+
+circle circleFrom3Points(vertex v1, vertex v2, vertex v3) {
+	circle c;
+	double ax = 2*(v1.x-v2.x);
+	double bx = 2*(v1.y-v2.y);
+	double cx = v1.x*v1.x - v2.x*v2.x + v1.y*v1.y - v2.y*v2.y;
+	double ay = 2*(v1.x-v3.x);
+	double by = 2*(v1.y-v3.y);
+	double cy = v1.x*v1.x - v3.x*v3.x + v1.y*v1.y - v3.y*v3.y;
+	double det = det2(ax, bx, ay, by);
+	c.center.x = det2(cx, bx, cy, by)/det;
+	c.center.y = det2(ax, cx, ay, cy)/det;
+	c.radius = sqrt((v1.x-c.center.x)*(v1.x-c.center.x)+(v1.y-c.center.y)*(v1.y-c.center.y));
+	return c;
+}
+
 /*void reportTriangle(struct Triangle triangle) {
 	printf("%f, %f - %f, %f - %f, %f\n", triangle.a.x, triangle.a.y, triangle.b.x, triangle.b.y, triangle.c.x, triangle.c.y);
 }*/
@@ -333,12 +342,12 @@ void clockwiseNextDelaunayEdge(int *p, int *q, int *r, vertex *S, int *size, int
 				//calc circle
 				*right = 2;
 				*r = i;
-				c = circle_vvv(S[*p], S[*q], S[*r]);
+				c = circleFrom3Points(S[*p], S[*q], S[*r]);
 			} else {
 				//if inside circle: calc new circle, else: do nothing
 				if(distance(c.center, S[i]) < c.radius) {
 					*r = i;
-					c = circle_vvv(S[*p], S[*q], S[*r]);
+					c = circleFrom3Points(S[*p], S[*q], S[*r]);
 				}
 			}
 		} else if(*right < 2) {
@@ -358,6 +367,12 @@ void clockwiseNextDelaunayEdge(int *p, int *q, int *r, vertex *S, int *size, int
 			}
 		}
 	}
+	printf("right: %d\n", *right);
+	if(*right == 1) {
+		printf("maxAngle: %f\n", maxAngle);
+	} else if(*right == 2) {
+		printf("circle x: %f, y: %f, radius: %f\n", c.center.x, c.center.y, c.radius);
+	}
 	//if you want to draw the circle comment this line out
 	//svgDrawCircle(c, out);
 }
@@ -371,15 +386,15 @@ void delaunayCws(vertex* S, int size, FILE *out, int draw) {
 		int j = firstDelaunayEdgeIncidentTo(i, S, size);
 		// Find the point p[j] e S that is nearest to p[i]
 		//j0 stores all values j had already have TODO better solution
-		//int jAlreadyUsed[size];
-		//int numberOfJ = 0;
+		int jAlreadyUsed[size];
+		int numberOfJ = 0;
 		int j0 = j;
 		//int j1 = j;
 		do {
 			//TODO eventuell nur k zurueckgeben (i haben wir ja schon)
 			int k;
 			int isTriangle;
-			//jAlreadyUsed[numberOfJ++] = j;
+			jAlreadyUsed[numberOfJ++] = j;
 			clockwiseNextDelaunayEdge(&i, &j, &k, S, &size, &isTriangle, out);
 			//bricht ab, wenn sich k und j abwechseln
 			//TODO die abwechslungszyklen koennen auch groesser sein
@@ -390,11 +405,13 @@ void delaunayCws(vertex* S, int size, FILE *out, int draw) {
 			if(i < j && i < k) {
 				if(isTriangle == 2){
 					vertex tri[3] = {S[i], S[j], S[k]};
+
 					if(draw){
 						reportTriangle(tri, 3, out);
 					}
 				}
 			}
+
 			//printf("j = %d, k = %d\n", j, k);
 			//printf("jAlreadyUsed = ");
 			/*for(int a = 0; a < numberOfJ; a++) {
@@ -403,6 +420,10 @@ void delaunayCws(vertex* S, int size, FILE *out, int draw) {
 			//printf("\n");
 			//j1 = j;
 			j = k;
+			if(arrayContains(jAlreadyUsed, numberOfJ, j) && j != j0) {
+				printf("ERROR\n");
+				return;
+			}
 		} while(/*!arrayContains(jAlreadyUsed, numberOfJ, j)*/ j != j0);
 	}
 	//return delaunayTriangles;
diff --git a/src/main.c b/src/main.c
index f7e2d4731b2f6560e00d81b9aa624bb58ce42ce9..deee0bcbaa440c22797ed2d1057473ec4891f780 100644
--- a/src/main.c
+++ b/src/main.c
@@ -12,8 +12,8 @@ int main(int argc, char *argv[]) {
 	//input: 1. function 0=cws_delaunay 2. # of points, 3. draw? 4. # of executions
     //create_image();
     //write_ppm ( "sine.ppm" );
-	int numberOfPoints = 24;
-	int function = 1;
+	int numberOfPoints = 15000;
+	int function = 0;
 	int draw = 1;
 	int executions = 1;
 	if(argc > 0) {
@@ -29,9 +29,12 @@ int main(int argc, char *argv[]) {
 	//puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
 	//printf("%d\n", RAND_MAX);
 	vertex points[numberOfPoints];
+	printf("%lu\n", sizeof(points));
 	generatePoints(points, numberOfPoints);
 	//drawPoints(points, numberOfPoints);
 
+	clock_t begin = clock();
+
 	switch(function){
 					case 0:
 						for(int i = 0; i < executions; i++) {
@@ -66,6 +69,10 @@ int main(int argc, char *argv[]) {
 						break;
 	}
 
+	clock_t end = clock();
+	double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
+
+	printf("Time spent: %f\n", time_spent);
 	//readFile("test.txt", "r");
 	return EXIT_SUCCESS;
 }
diff --git a/src/voronoi.c b/src/voronoi.c
index bd5f902091f7365a25e5c8fde3e1eac9ca895202..ca9685e393e5be95b7f6e68815c115c93620330b 100644
--- a/src/voronoi.c
+++ b/src/voronoi.c
@@ -63,52 +63,24 @@ vertex findBorderVertex(vertex a, vertex b) {
 	double y = center.y + m * dir.y;
 	if(m > 0 && (y > 0 && y < 1)) {
 		ret = (vertex){0, y};
-		printf("%f = (0 - %f)/%f\n", m, center.x, dir.x);
-		printf("y = %f = %f + %f * %f\n", y, center.y, m, dir.y);
-		printVertex(a);
-		printf("\n");
-		printVertex(b);
-		printf("\n");
-		printVertex(ret);
-		printf("\n");
 		return ret;
 	}
 	m = (1 - center.x)/dir.x;
 	y = center.y + m * dir.y;
 	if(m > 0 && (y > 0 && y < 1)) {
 		ret = (vertex){1, y};
-		printf("%f = (1 - %f)/%f\n", m, center.x, dir.x);
-		printf("y = %f = %f + %f * %f\n", y, center.y, m, dir.y);
-		printVertex(a);
-		printf("\n");
-		printVertex(b);
-		printf("\n");
-		printVertex(ret);
-		printf("\n");
 		return ret;
 	}
 	m = (0 - center.y)/dir.y;
 	double x = center.x + m * dir.x;
 	if(m > 0 && (x > 0 && x < 1)) {
 		ret = (vertex){x, 0};
-		printVertex(a);
-		printf("\n");
-		printVertex(b);
-		printf("\n");
-		printVertex(ret);
-		printf("\n");
 		return ret;
 	}
 	m = (1 - center.y)/dir.y;
 	x = center.x + m * dir.x;
 	if(m > 0 && (x > 0 && x < 1)) {
 		ret = (vertex){x, 1};
-		printVertex(a);
-		printf("\n");
-		printVertex(b);
-		printf("\n");
-		printVertex(ret);
-		printf("\n");
 		return ret;
 	}
 	return ret;
@@ -140,10 +112,16 @@ void voronoiCws(vertex* S, int size, FILE *out, int draw) {
 					firstV = currentV;
 				} else {
 					if(!outOfBorder(currentV)) {
-						reportEdge((line){currentV, lastV}, out);
+						if(draw) {
+							reportEdge((line){currentV, lastV}, out);
+
+						}
 					}
 					if(k == j0) {
-						reportEdge((line){currentV, firstV}, out);
+						if(draw) {
+							reportEdge((line){currentV, firstV}, out);
+
+						}
 					}
 				}
 			} else if(isTriangle == 1) {
@@ -155,7 +133,10 @@ void voronoiCws(vertex* S, int size, FILE *out, int draw) {
 					firstV = currentV;
 				} else {
 					if(!outOfBorder(lastV)) {
-						reportEdge((line){currentV, lastV}, out);
+						if(draw) {
+							reportEdge((line){currentV, lastV}, out);
+
+						}
 					}
 				}
 				currentV = findBorderVertex(S[i], S[k]);