diff --git a/src/sbbs3/sbbswrap.h b/src/sbbs3/sbbswrap.h
index c460e3c9acce38ef3ae705b8aada4910bf52951d..6fe2e1c67905a05601d4ec7004bfd9669bd1fa04 100644
--- a/src/sbbs3/sbbswrap.h
+++ b/src/sbbs3/sbbswrap.h
@@ -89,20 +89,17 @@ extern "C" {
 /* Compiler-specific */
 /*********************/
 
-#if defined(__GNUC__)	/* GNU CC */
-
-#warning "ultoa needs to be defined or replaced"
-#define ultoa	ltoa
-
-#endif	/* __GNUC__ */
+#ifdef __GNUC__	/* GNU CC */
+	DLLEXPORT char* ultoa(ulong, char*, int radix);
+#endif
 
 #ifdef __BORLANDC__
 	#define sbbs_random(x)		random(x)
-#else
+#else 
 	DLLEXPORT int	sbbs_random(int n);
 #endif
 
-#if (__BORLANDC__ > 0x0410)
+#if __BORLANDC__ > 0x0410
 	#define _chmod(p,f,a)		_rtl_chmod(p,f,a) 	/* _chmod obsolete in 4.x */
 #endif
 
diff --git a/src/sbbs3/wrappers.c b/src/sbbs3/wrappers.c
index 939e442d5e43675cf88fded3c2d084912b2255c6..e77129e47c4902cefdef36ef2583908523931041 100644
--- a/src/sbbs3/wrappers.c
+++ b/src/sbbs3/wrappers.c
@@ -107,6 +107,27 @@ int sbbs_random(int n)
 }
 #endif
 
+/****************************************************************************/
+/* There may be a native GNU C Library function to this...					*/
+/****************************************************************************/
+#ifdef __GNUC__
+char* ultoa(ulong val, char* str, int radix)
+{
+	switch(radix) {
+		case 10:
+			sprintf(str,"%lu",val);
+			break;
+		case 16:
+			sprintf(str,"%lx",val);
+			break;
+		default:
+			sprintf(str,"bad radix: %d",radix);
+			break;
+	}
+	return(str);
+}
+#endif
+
 /****************************************************************************/
 /* Return free disk space in bytes (up to a maximum of 4GB)					*/
 /****************************************************************************/