Index: backend.c
===================================================================
--- backend.c   (revision 2486)
+++ backend.c   (working copy)
@@ -423,6 +423,12 @@
          * cleanup doesn't always remove enough destructed objects.
          */
 
+    struct itimerval timer_value;
+    timer_value.it_interval.tv_sec = alarm_time;
+    timer_value.it_interval.tv_usec = 0;
+    timer_value.it_value.tv_sec = alarm_time;
+    timer_value.it_value.tv_usec = 0;
+    
     /*
      * Set up.
      */
@@ -438,7 +444,11 @@
         current_time = get_current_time();
         comm_time_to_call_heart_beat = MY_FALSE;
         time_to_call_heart_beat = MY_FALSE;
-        alarm(alarm_time);
+//        alarm(alarm_time);
+        if(setitimer( ITIMER_REAL, &timer_value, NULL )) {
+          fatal("Could not initialize the timer, errno %d.\n",
+                errno);
+        }                      
     }
 
     printf("%s LDMud ready for users.\n", time_stamp());
@@ -709,7 +719,7 @@
             /* Start the next alarm */
             comm_time_to_call_heart_beat = MY_FALSE;
             time_to_call_heart_beat = MY_FALSE;
-            alarm(alarm_time);
+            //alarm(alarm_time);
 
             /* Do the timed events */
            if (!synch_heart_beats
@@ -793,7 +803,12 @@
 {
     static mp_int last_alarm_time = 0;
     mp_int curtime = get_current_time();
+    struct itimerval timer_value;
 
+    timer_value.it_interval.tv_sec = alarm_time;
+    timer_value.it_interval.tv_usec = 0;
+    timer_value.it_value.tv_usec = 0;
+
     if (t_flag)  /* Timing turned off? */
         return;
 
@@ -811,11 +826,18 @@
                       "- restarting it.\n",
                       time_stamp(), curtime - last_alarm_time);
 
-        alarm(0); /* stop alarm in case it is still alive, but just slow */
+        //alarm(0); /* stop alarm in case it is still alive, but just slow */
+        timer_value.it_value.tv_sec = 0;
+        setitimer( ITIMER_REAL, &timer_value, NULL );
         comm_time_to_call_heart_beat = MY_TRUE;
         time_to_call_heart_beat = MY_TRUE;
         (void)signal(SIGALRM, (RETSIGTYPE(*)(int))catch_alarm);
-        alarm(alarm_time);
+        //alarm(alarm_time);
+        timer_value.it_value.tv_sec = alarm_time;
+        if(setitimer( ITIMER_REAL, &timer_value, NULL )) {
+          fatal("Could not initialize the timer, errno %d.\n",
+                errno);
+        }                      
 
         last_alarm_time = curtime; /* Since we just restarted it */
     }
