diff --git a/fputs.c b/fputs.c
index cde2cf9..4b68f96 100644
--- a/fputs.c
+++ b/fputs.c
@@ -11,5 +11,5 @@
 
 int fputs(const char *s, FILE *file)
 {
-  return __fwrite(s, strlen(s), file);
+  return _fwrite(s, strlen(s), file);
 }
diff --git a/fread.c b/fread.c
index b8ddd8d..8f7dba9 100644
--- a/fread.c
+++ b/fread.c
@@ -6,7 +6,7 @@
 #include <unistd.h>
 #include <stdio.h>
 
-size_t __fread(void *buf, size_t count, FILE *f)
+size_t _fread(void *buf, size_t count, FILE *f)
 {
   size_t bytes = 0;
   ssize_t rv;
diff --git a/fread2.c b/fread2.c
index 6172f9d..9e5ac81 100644
--- a/fread2.c
+++ b/fread2.c
@@ -9,5 +9,5 @@
 
 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *f)
 {
-  return __fread(ptr, size*nmemb, f)/size;
+  return _fread(ptr, size*nmemb, f)/size;
 }
diff --git a/fwrite.c b/fwrite.c
index 5b49dfb..0a73188 100644
--- a/fwrite.c
+++ b/fwrite.c
@@ -6,7 +6,7 @@
 #include <unistd.h>
 #include <stdio.h>
 
-size_t __fwrite(const void *buf, size_t count, FILE *f)
+size_t _fwrite(const void *buf, size_t count, FILE *f)
 {
   size_t bytes = 0;
   ssize_t rv;
diff --git a/fwrite2.c b/fwrite2.c
index a869c4f..82ec832 100644
--- a/fwrite2.c
+++ b/fwrite2.c
@@ -9,5 +9,5 @@
 
 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *f)
 {
-  return __fwrite(ptr, size*nmemb, f)/size;
+  return _fwrite(ptr, size*nmemb, f)/size;
 }
diff --git a/include/stdio.h b/include/stdio.h
index efec877..367e4ad 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -67,19 +67,19 @@
 __extern int fputs(const char *, FILE *);
 __extern int puts(const char *);
 
-__extern size_t __fread(void *, size_t, FILE *);
-__extern size_t __fwrite(const void *, size_t, FILE *);
+__extern size_t _fread(void *, size_t, FILE *);
+__extern size_t _fwrite(const void *, size_t, FILE *);
 
 #ifndef __NO_FREAD_FWRITE_INLINES
-__extern __inline__ size_t
+static __inline__ size_t
 fread(void *__p, size_t __s, size_t __n, FILE *__f)
 {
-  return __fread(__p, __s*__n, __f)/__s;
+  return _fread(__p, __s*__n, __f)/__s;
 }
-__extern __inline__ size_t
+static  __inline__ size_t
 fwrite(void *__p, size_t __s, size_t __n, FILE *__f)
 {
-  return __fwrite(__p, __s*__n, __f)/__s;
+  return _fwrite(__p, __s*__n, __f)/__s;
 }
 #endif
 
diff --git a/klibc/fputs.c b/klibc/fputs.c
index cde2cf9..4b68f96 100644
--- a/klibc/fputs.c
+++ b/klibc/fputs.c
@@ -11,5 +11,5 @@
 
 int fputs(const char *s, FILE *file)
 {
-  return __fwrite(s, strlen(s), file);
+  return _fwrite(s, strlen(s), file);
 }
diff --git a/klibc/fread.c b/klibc/fread.c
index b8ddd8d..8f7dba9 100644
--- a/klibc/fread.c
+++ b/klibc/fread.c
@@ -6,7 +6,7 @@
 #include <unistd.h>
 #include <stdio.h>
 
-size_t __fread(void *buf, size_t count, FILE *f)
+size_t _fread(void *buf, size_t count, FILE *f)
 {
   size_t bytes = 0;
   ssize_t rv;
diff --git a/klibc/fread2.c b/klibc/fread2.c
index 6172f9d..9e5ac81 100644
--- a/klibc/fread2.c
+++ b/klibc/fread2.c
@@ -9,5 +9,5 @@
 
 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *f)
 {
-  return __fread(ptr, size*nmemb, f)/size;
+  return _fread(ptr, size*nmemb, f)/size;
 }
diff --git a/klibc/fwrite.c b/klibc/fwrite.c
index 5b49dfb..0a73188 100644
--- a/klibc/fwrite.c
+++ b/klibc/fwrite.c
@@ -6,7 +6,7 @@
 #include <unistd.h>
 #include <stdio.h>
 
-size_t __fwrite(const void *buf, size_t count, FILE *f)
+size_t _fwrite(const void *buf, size_t count, FILE *f)
 {
   size_t bytes = 0;
   ssize_t rv;
diff --git a/klibc/fwrite2.c b/klibc/fwrite2.c
index a869c4f..82ec832 100644
--- a/klibc/fwrite2.c
+++ b/klibc/fwrite2.c
@@ -9,5 +9,5 @@
 
 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *f)
 {
-  return __fwrite(ptr, size*nmemb, f)/size;
+  return _fwrite(ptr, size*nmemb, f)/size;
 }
diff --git a/klibc/include/stdio.h b/klibc/include/stdio.h
index efec877..367e4ad 100644
--- a/klibc/include/stdio.h
+++ b/klibc/include/stdio.h
@@ -67,19 +67,19 @@
 __extern int fputs(const char *, FILE *);
 __extern int puts(const char *);
 
-__extern size_t __fread(void *, size_t, FILE *);
-__extern size_t __fwrite(const void *, size_t, FILE *);
+__extern size_t _fread(void *, size_t, FILE *);
+__extern size_t _fwrite(const void *, size_t, FILE *);
 
 #ifndef __NO_FREAD_FWRITE_INLINES
-__extern __inline__ size_t
+static __inline__ size_t
 fread(void *__p, size_t __s, size_t __n, FILE *__f)
 {
-  return __fread(__p, __s*__n, __f)/__s;
+  return _fread(__p, __s*__n, __f)/__s;
 }
-__extern __inline__ size_t
+static  __inline__ size_t
 fwrite(void *__p, size_t __s, size_t __n, FILE *__f)
 {
-  return __fwrite(__p, __s*__n, __f)/__s;
+  return _fwrite(__p, __s*__n, __f)/__s;
 }
 #endif
 
diff --git a/klibc/puts.c b/klibc/puts.c
index 52bea83..ecebf27 100644
--- a/klibc/puts.c
+++ b/klibc/puts.c
@@ -9,5 +9,5 @@
   if ( fputs(s, stdout) < 0 )
     return -1;
 
-  return __fwrite("\n", 1, stdout);
+  return _fwrite("\n", 1, stdout);
 }
diff --git a/klibc/tests/microhello.c b/klibc/tests/microhello.c
index 7c081d6..e57cd05 100644
--- a/klibc/tests/microhello.c
+++ b/klibc/tests/microhello.c
@@ -4,6 +4,6 @@
 int main(void)
 {
   const char hello[] = "Hello, World!\n";
-  __fwrite(hello, sizeof hello-1, stdout);
+  _fwrite(hello, sizeof hello-1, stdout);
   return 0;
 }
diff --git a/klibc/vfprintf.c b/klibc/vfprintf.c
index 62124b7..39cf983 100644
--- a/klibc/vfprintf.c
+++ b/klibc/vfprintf.c
@@ -22,5 +22,5 @@
   if ( rv > BUFFER_SIZE-1 )
     rv = BUFFER_SIZE-1;
 
-  return __fwrite(buffer, rv, file);
+  return _fwrite(buffer, rv, file);
 }
diff --git a/puts.c b/puts.c
index 52bea83..ecebf27 100644
--- a/puts.c
+++ b/puts.c
@@ -9,5 +9,5 @@
   if ( fputs(s, stdout) < 0 )
     return -1;
 
-  return __fwrite("\n", 1, stdout);
+  return _fwrite("\n", 1, stdout);
 }
diff --git a/tests/microhello.c b/tests/microhello.c
index 7c081d6..e57cd05 100644
--- a/tests/microhello.c
+++ b/tests/microhello.c
@@ -4,6 +4,6 @@
 int main(void)
 {
   const char hello[] = "Hello, World!\n";
-  __fwrite(hello, sizeof hello-1, stdout);
+  _fwrite(hello, sizeof hello-1, stdout);
   return 0;
 }
diff --git a/vfprintf.c b/vfprintf.c
index 62124b7..39cf983 100644
--- a/vfprintf.c
+++ b/vfprintf.c
@@ -22,5 +22,5 @@
   if ( rv > BUFFER_SIZE-1 )
     rv = BUFFER_SIZE-1;
 
-  return __fwrite(buffer, rv, file);
+  return _fwrite(buffer, rv, file);
 }
