diff --git a/src/error.c b/src/error.c
index 1770453aa3ba3a1c7463c4d4da3f04c1c3254bdb..aeda41fefe442ec3254cbb1bd1381d0c788a5f47 100644
--- a/src/error.c
+++ b/src/error.c
@@ -12,11 +12,14 @@
 #include "array.h"
 #include "object.h"
 
+#undef ATTRIBUTE
+#define ATTRIBUTE(X)
+
 char *automatic_fatal, *exit_on_error;
 JMP_BUF *recoveries=0;
 ONERROR *onerror_stack=0;
 
-my_jmp_buf *init_recovery(JMP_BUF *r)
+JMP_BUF *init_recovery(JMP_BUF *r)
 {
   r->fp=fp;
   r->sp=sp-evaluator_stack;
@@ -24,10 +27,10 @@ my_jmp_buf *init_recovery(JMP_BUF *r)
   r->previous=recoveries;
   r->onerror=onerror_stack;
   recoveries=r;
-  return & ( r->recovery );
+  return r;
 }
 
-void throw()
+void throw() ATTRIBUTE((noreturn))
 {
   if(!recoveries)
     fatal("No error recovery context.\n");
@@ -67,7 +70,7 @@ void throw()
 
 struct svalue throw_value = { T_INT };
 
-void va_error(char *fmt, va_list args)
+void va_error(char *fmt, va_list args) ATTRIBUTE((noreturn))
 {
   char buf[2000];
   static char *in_error;
@@ -115,7 +118,7 @@ void va_error(char *fmt, va_list args)
   throw();  /* Hope someone is catching, or we will be out of balls. */
 }
 
-void error(char *fmt,...)
+void error(char *fmt,...) ATTRIBUTE((noreturn,format (printf, 1, 2)))
 {
   va_list args;
   va_start(args,fmt);
@@ -124,7 +127,7 @@ void error(char *fmt,...)
 }
 
 
-void fatal(char *fmt, ...)
+void fatal(char *fmt, ...) ATTRIBUTE((noreturn,format (printf, 1, 2)))
 {
   va_list args;
   static int in_fatal = 0;
diff --git a/src/error.h b/src/error.h
index f3878b3c767841fa15fcd4fe87646f0e71b853ca..527b7b8fbc335c251520b1aa1cfbcecfa136ae30 100644
--- a/src/error.h
+++ b/src/error.h
@@ -29,12 +29,10 @@ typedef struct ONERROR
   void *arg;
 } ONERROR;
 
-typedef jmp_buf my_jmp_buf; /* Maybe I'll get less warnings like this */
-
 typedef struct JMP_BUF
 {
   struct JMP_BUF *previous;
-  my_jmp_buf recovery;
+  jmp_buf recovery;
   struct frame *fp;
   INT32 sp;
   INT32 mark_sp;
@@ -46,7 +44,7 @@ extern JMP_BUF *recoveries;
 extern struct svalue throw_value;
 extern char *automatic_fatal, *exit_on_error;
 
-#define SETJMP(X) setjmp((init_recovery(&X)[0]))
+#define SETJMP(X) setjmp((init_recovery(&X)->recovery))
 #define UNSETJMP(X) recoveries=X.previous;
 
 #define SET_ONERROR(X,Y,Z) \
@@ -59,12 +57,13 @@ extern char *automatic_fatal, *exit_on_error;
 
 #define UNSET_ONERROR(X) onerror_stack=X.previous
 
-my_jmp_buf *init_recovery(JMP_BUF *r);
-int fix_recovery(int i, JMP_BUF *r);
+/* Prototypes begin here */
+JMP_BUF *init_recovery(JMP_BUF *r);
 void throw() ATTRIBUTE((noreturn));
 void va_error(char *fmt, va_list args) ATTRIBUTE((noreturn));
 void error(char *fmt,...) ATTRIBUTE((noreturn,format (printf, 1, 2)));
 void fatal(char *fmt, ...) ATTRIBUTE((noreturn,format (printf, 1, 2)));
+/* Prototypes end here */
 
 #endif