Index: c/src/exec/libnetworking/rtems/rtems_glue.c
===================================================================
--- c/src/exec/libnetworking/rtems/rtems_glue.c	(revision 3393f6dda3ed09d70e286acc00cdcf81f4a32f75)
+++ c/src/exec/libnetworking/rtems/rtems_glue.c	(revision 0e08ff003347d0282bbc45c73997cab3048805df)
@@ -2,4 +2,10 @@
  *  $Id$
  */
+
+#define RTEMS_FAST_MUTEX
+
+#ifdef RTEMS_FAST_MUTEX
+#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 1
+#endif
 
 #include <string.h>
@@ -46,4 +52,7 @@
  */
 static rtems_id networkSemaphore;
+#ifdef RTEMS_FAST_MUTEX
+Semaphore_Control   *the_networkSemaphore;
+#endif
 static rtems_id networkDaemonTid;
 static rtems_unsigned32 networkDaemonPriority;
@@ -222,7 +231,7 @@
 	sc = rtems_semaphore_create (rtems_build_name('B', 'S', 'D', 'n'),
 					0,
-					RTEMS_FIFO |
+					RTEMS_PRIORITY |
 						RTEMS_BINARY_SEMAPHORE |
-						RTEMS_NO_INHERIT_PRIORITY |
+						RTEMS_INHERIT_PRIORITY |
 						RTEMS_NO_PRIORITY_CEILING |
 						RTEMS_LOCAL,
@@ -233,4 +242,11 @@
 		return -1;
 	}
+#ifdef RTEMS_FAST_MUTEX
+	{
+	Objects_Locations location;
+	the_networkSemaphore = _Semaphore_Get( networkSemaphore, &location );
+	_Thread_Enable_dispatch();
+	}
+#endif
 
 	/*
@@ -271,4 +287,17 @@
 rtems_bsdnet_semaphore_obtain (void)
 {
+#ifdef RTEMS_FAST_MUTEX
+	ISR_Level level;
+	_ISR_Disable (level);
+	_CORE_mutex_Seize (
+		&the_networkSemaphore->Core_control.mutex,
+		networkSemaphore,
+		1,		/* wait */
+		0,		/* forever */
+		level
+		);
+	if (_Thread_Executing->Wait.return_code)
+		rtems_panic ("Can't obtain network semaphore\n");
+#else
 	rtems_status_code sc;
 
@@ -276,4 +305,5 @@
 	if (sc != RTEMS_SUCCESSFUL)
 		rtems_panic ("Can't obtain network semaphore: `%s'\n", rtems_status_text (sc));
+#endif
 }
 
@@ -284,4 +314,17 @@
 rtems_bsdnet_semaphore_release (void)
 {
+#ifdef RTEMS_FAST_MUTEX
+	int i;
+
+	_Thread_Disable_dispatch();
+	i = _CORE_mutex_Surrender (
+		&the_networkSemaphore->Core_control.mutex,
+		networkSemaphore,
+		NULL
+		);
+	_Thread_Enable_dispatch();
+	if (i)
+		rtems_panic ("Can't release network semaphore\n");
+#else
 	rtems_status_code sc;
 
@@ -289,5 +332,6 @@
 	if (sc != RTEMS_SUCCESSFUL)
 		rtems_panic ("Can't release network semaphore: `%s'\n", rtems_status_text (sc));
-										}
+#endif
+}
 
 /*
Index: c/src/libnetworking/rtems/rtems_glue.c
===================================================================
--- c/src/libnetworking/rtems/rtems_glue.c	(revision 3393f6dda3ed09d70e286acc00cdcf81f4a32f75)
+++ c/src/libnetworking/rtems/rtems_glue.c	(revision 0e08ff003347d0282bbc45c73997cab3048805df)
@@ -2,4 +2,10 @@
  *  $Id$
  */
+
+#define RTEMS_FAST_MUTEX
+
+#ifdef RTEMS_FAST_MUTEX
+#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 1
+#endif
 
 #include <string.h>
@@ -46,4 +52,7 @@
  */
 static rtems_id networkSemaphore;
+#ifdef RTEMS_FAST_MUTEX
+Semaphore_Control   *the_networkSemaphore;
+#endif
 static rtems_id networkDaemonTid;
 static rtems_unsigned32 networkDaemonPriority;
@@ -222,7 +231,7 @@
 	sc = rtems_semaphore_create (rtems_build_name('B', 'S', 'D', 'n'),
 					0,
-					RTEMS_FIFO |
+					RTEMS_PRIORITY |
 						RTEMS_BINARY_SEMAPHORE |
-						RTEMS_NO_INHERIT_PRIORITY |
+						RTEMS_INHERIT_PRIORITY |
 						RTEMS_NO_PRIORITY_CEILING |
 						RTEMS_LOCAL,
@@ -233,4 +242,11 @@
 		return -1;
 	}
+#ifdef RTEMS_FAST_MUTEX
+	{
+	Objects_Locations location;
+	the_networkSemaphore = _Semaphore_Get( networkSemaphore, &location );
+	_Thread_Enable_dispatch();
+	}
+#endif
 
 	/*
@@ -271,4 +287,17 @@
 rtems_bsdnet_semaphore_obtain (void)
 {
+#ifdef RTEMS_FAST_MUTEX
+	ISR_Level level;
+	_ISR_Disable (level);
+	_CORE_mutex_Seize (
+		&the_networkSemaphore->Core_control.mutex,
+		networkSemaphore,
+		1,		/* wait */
+		0,		/* forever */
+		level
+		);
+	if (_Thread_Executing->Wait.return_code)
+		rtems_panic ("Can't obtain network semaphore\n");
+#else
 	rtems_status_code sc;
 
@@ -276,4 +305,5 @@
 	if (sc != RTEMS_SUCCESSFUL)
 		rtems_panic ("Can't obtain network semaphore: `%s'\n", rtems_status_text (sc));
+#endif
 }
 
@@ -284,4 +314,17 @@
 rtems_bsdnet_semaphore_release (void)
 {
+#ifdef RTEMS_FAST_MUTEX
+	int i;
+
+	_Thread_Disable_dispatch();
+	i = _CORE_mutex_Surrender (
+		&the_networkSemaphore->Core_control.mutex,
+		networkSemaphore,
+		NULL
+		);
+	_Thread_Enable_dispatch();
+	if (i)
+		rtems_panic ("Can't release network semaphore\n");
+#else
 	rtems_status_code sc;
 
@@ -289,5 +332,6 @@
 	if (sc != RTEMS_SUCCESSFUL)
 		rtems_panic ("Can't release network semaphore: `%s'\n", rtems_status_text (sc));
-										}
+#endif
+}
 
 /*
Index: cpukit/libnetworking/rtems/rtems_glue.c
===================================================================
--- cpukit/libnetworking/rtems/rtems_glue.c	(revision 3393f6dda3ed09d70e286acc00cdcf81f4a32f75)
+++ cpukit/libnetworking/rtems/rtems_glue.c	(revision 0e08ff003347d0282bbc45c73997cab3048805df)
@@ -2,4 +2,10 @@
  *  $Id$
  */
+
+#define RTEMS_FAST_MUTEX
+
+#ifdef RTEMS_FAST_MUTEX
+#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 1
+#endif
 
 #include <string.h>
@@ -46,4 +52,7 @@
  */
 static rtems_id networkSemaphore;
+#ifdef RTEMS_FAST_MUTEX
+Semaphore_Control   *the_networkSemaphore;
+#endif
 static rtems_id networkDaemonTid;
 static rtems_unsigned32 networkDaemonPriority;
@@ -222,7 +231,7 @@
 	sc = rtems_semaphore_create (rtems_build_name('B', 'S', 'D', 'n'),
 					0,
-					RTEMS_FIFO |
+					RTEMS_PRIORITY |
 						RTEMS_BINARY_SEMAPHORE |
-						RTEMS_NO_INHERIT_PRIORITY |
+						RTEMS_INHERIT_PRIORITY |
 						RTEMS_NO_PRIORITY_CEILING |
 						RTEMS_LOCAL,
@@ -233,4 +242,11 @@
 		return -1;
 	}
+#ifdef RTEMS_FAST_MUTEX
+	{
+	Objects_Locations location;
+	the_networkSemaphore = _Semaphore_Get( networkSemaphore, &location );
+	_Thread_Enable_dispatch();
+	}
+#endif
 
 	/*
@@ -271,4 +287,17 @@
 rtems_bsdnet_semaphore_obtain (void)
 {
+#ifdef RTEMS_FAST_MUTEX
+	ISR_Level level;
+	_ISR_Disable (level);
+	_CORE_mutex_Seize (
+		&the_networkSemaphore->Core_control.mutex,
+		networkSemaphore,
+		1,		/* wait */
+		0,		/* forever */
+		level
+		);
+	if (_Thread_Executing->Wait.return_code)
+		rtems_panic ("Can't obtain network semaphore\n");
+#else
 	rtems_status_code sc;
 
@@ -276,4 +305,5 @@
 	if (sc != RTEMS_SUCCESSFUL)
 		rtems_panic ("Can't obtain network semaphore: `%s'\n", rtems_status_text (sc));
+#endif
 }
 
@@ -284,4 +314,17 @@
 rtems_bsdnet_semaphore_release (void)
 {
+#ifdef RTEMS_FAST_MUTEX
+	int i;
+
+	_Thread_Disable_dispatch();
+	i = _CORE_mutex_Surrender (
+		&the_networkSemaphore->Core_control.mutex,
+		networkSemaphore,
+		NULL
+		);
+	_Thread_Enable_dispatch();
+	if (i)
+		rtems_panic ("Can't release network semaphore\n");
+#else
 	rtems_status_code sc;
 
@@ -289,5 +332,6 @@
 	if (sc != RTEMS_SUCCESSFUL)
 		rtems_panic ("Can't release network semaphore: `%s'\n", rtems_status_text (sc));
-										}
+#endif
+}
 
 /*
