--- timeHandler.h.orig	2011-03-31 13:58:12.000000000 +0200
+++ timeHandler.h	2011-03-31 14:20:32.000000000 +0200
@@ -1,7 +1,13 @@
 #ifndef __TIMEHANDLER_H__
 #define __TIMEHANDLER_H__
 
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#else
 #include <ctime>
+#endif
 
 /*
  * timeHandler.h, part of VCMI engine
@@ -13,16 +19,35 @@
  *
  */
 
+#ifdef __FreeBSD__
 class timeHandler
 {
 public:
-	clock_t start, last, mem;
 	timeHandler():start(clock()){last=clock();mem=0;};
-	long getDif(){long ret=clock()-last;last=clock();return ret/(CLOCKS_PER_SEC/1000);};//get diff in milliseconds
+	long getDif(){long ret=clock()-last;last=clock();return ret/1000;};//get diff in milliseconds
 	void update(){last=clock();};
 	void remember(){mem=clock();};
 	long memDif(){return clock()-mem;};
+private:
+	long start, last, mem;
+	long clock() {
+		struct rusage usage;
+		getrusage(RUSAGE_SELF, &usage);
+		return static_cast<long>(usage.ru_utime.tv_sec + usage.ru_stime.tv_sec) * 1000000 + usage.ru_utime.tv_usec + usage.ru_stime.tv_usec;
+	}
 };
-
+#else
+class timeHandler
+{
+public:
+  timeHandler():start(clock()){last=clock();mem=0;};
+  long getDif(){long ret=clock()-last;last=clock();return ret/(CLOCKS_PER_SEC/1000);};//get diff in milliseconds
+  void update(){last=clock();};
+  void remember(){mem=clock();};
+  long memDif(){return clock()-mem;};
+private:
+  clock_t start, last, mem;
+};
+#endif // __FreeBSD__
 
 #endif // __TIMEHANDLER_H__
