diff --git a/src/gui_at_fs.c b/src/gui_at_fs.c
index 26b96e0..77c8ea6 100644
--- a/src/gui_at_fs.c
+++ b/src/gui_at_fs.c
@@ -170,38 +170,19 @@
 
 static int	SFstatus = SEL_FILE_NULL;
 
-/***************** static functions */
+/***************** forward declare static functions */
 
 static void SFsetText(char *path);
 static void SFtextChanged(void);
-static char *SFgetText(void);
-static void SFupdatePath(void);
 static int SFgetDir(SFDir *dir);
 static void SFdrawLists(int doScroll);
 static void SFdrawList(int n, int doScroll);
 static void SFclearList(int n, int doScroll);
-static void SFbuttonPressList(Widget w, int n, XButtonPressedEvent *event);
-static void SFbuttonReleaseList(Widget w, int n, XButtonReleasedEvent *event);
-static void SFdirModTimer(XtPointer cl, XtIntervalId *id);
 static char SFstatChar(stat_T *statBuf);
-static void SFdrawStrings(Window w, SFDir *dir, int from, int to);
-static int SFnewInvertEntry(int n, XMotionEvent *event);
-static void SFinvertEntry(int n);
-static void SFenterList(Widget w, int n, XEnterWindowEvent *event);
-static void SFleaveList(Widget w, int n, XEvent *event);
 static void SFmotionList(Widget w, int n, XMotionEvent *event);
-static void SFvFloatSliderMovedCallback(Widget w, XtPointer n, XtPointer fnew);
 static void SFvSliderMovedCallback(Widget w, int n, int nw);
-static void SFvAreaSelectedCallback(Widget w, XtPointer n, XtPointer pnew);
-static void SFhSliderMovedCallback(Widget w, XtPointer n, XtPointer nw);
-static void SFhAreaSelectedCallback(Widget w, XtPointer n, XtPointer pnew);
-static void SFpathSliderMovedCallback(Widget w, XtPointer client_data, XtPointer nw);
-static void SFpathAreaSelectedCallback(Widget w, XtPointer client_data, XtPointer pnew);
 static Boolean SFworkProc(void);
 static int SFcompareEntries(const void *p, const void *q);
-static void SFprepareToReturn(void);
-static void SFcreateWidgets(Widget toplevel, char *prompt, char *ok, char *cancel);
-static void SFsetColors(guicolor_T bg, guicolor_T fg, guicolor_T scroll_bg, guicolor_T scrollfg);
 
 /***************** xstat.h */
 
@@ -237,8 +218,6 @@
 
 static int	SFtwiddle = 0;
 
-static int SFchdir(char *path);
-
     static int
 SFchdir(char *path)
 {
@@ -256,8 +235,6 @@
     return result;
 }
 
-static void SFfree(int i);
-
     static void
 SFfree(int i)
 {
@@ -279,16 +256,12 @@
     dir->dir = NULL;
 }
 
-static void SFstrdup(char **s1, char *s2);
-
     static void
 SFstrdup(char **s1, char *s2)
 {
     *s1 = strcpy(XtMalloc((unsigned)(strlen(s2) + 1)), s2);
 }
 
-static void SFunreadableDir(SFDir *dir);
-
     static void
 SFunreadableDir(SFDir *dir)
 {
@@ -302,8 +275,6 @@
     dir->nChars = strlen(cannotOpen);
 }
 
-static void SFreplaceText(SFDir *dir, char *str);
-
     static void
 SFreplaceText(SFDir *dir, char *str)
 {
@@ -323,8 +294,6 @@
     SFtextChanged();
 }
 
-static void SFexpand(char *str);
-
     static void
 SFexpand(char *str)
 {
@@ -379,8 +348,6 @@
     XtFree(growing);
 }
 
-static int SFfindFile(SFDir *dir, char *str);
-
     static int
 SFfindFile(SFDir *dir, char *str)
 {
@@ -478,8 +445,6 @@
     return 0;
 }
 
-static void SFunselect(void);
-
     static void
 SFunselect(void)
 {
@@ -492,16 +457,12 @@
     dir->endSelection = -1;
 }
 
-static int SFcompareLogins(const void *p, const void *q);
-
     static int
 SFcompareLogins(const void *p, const void *q)
 {
     return strcmp(((SFLogin *)p)->name, ((SFLogin *)q)->name);
 }
 
-static void SFgetHomeDirs(void);
-
     static void
 SFgetHomeDirs(void)
 {
@@ -568,8 +529,6 @@
 	(void)strcat(entries[i].real, "/");
 }
 
-static int SFfindHomeDir(char *begin, char *end);
-
     static int
 SFfindHomeDir(char *begin, char *end)
 {
@@ -868,8 +827,6 @@
     }
 }
 
-static int SFcheckDir(int n, SFDir *dir);
-
     static int
 SFcheckDir(int n, SFDir *dir)
 {
@@ -932,8 +889,6 @@
     return 0;
 }
 
-static int SFcheckFiles(SFDir *dir);
-
     static int
 SFcheckFiles(SFDir *dir)
 {
@@ -1077,8 +1032,6 @@
 
 static XtIntervalId SFscrollTimerId;
 
-static void SFinitFont(void);
-
     static void
 SFinitFont(void)
 {
@@ -1128,8 +1081,6 @@
 #endif
 }
 
-static void SFcreateGC(void);
-
     static void
 SFcreateGC(void)
 {
@@ -1261,8 +1212,6 @@
     }
 }
 
-static void SFdeleteEntry(SFDir *dir, SFEntry *entry);
-
     static void
 SFdeleteEntry(SFDir *dir, SFEntry *entry)
 {
@@ -1313,8 +1262,6 @@
 #endif
 }
 
-static void SFwriteStatChar(char *name, int last, stat_T *statBuf);
-
     static void
 SFwriteStatChar(
     char	*name,
@@ -1324,8 +1271,6 @@
     name[last] = SFstatChar(statBuf);
 }
 
-static int SFstatAndCheck(SFDir *dir, SFEntry *entry);
-
     static int
 SFstatAndCheck(SFDir *dir, SFEntry *entry)
 {
@@ -1532,8 +1477,6 @@
 	    SFentryHeight);
 }
 
-static unsigned long SFscrollTimerInterval(void);
-
     static unsigned long
 SFscrollTimerInterval(void)
 {
@@ -1561,8 +1504,6 @@
     return (unsigned long)t;
 }
 
-static void SFscrollTimer(XtPointer p, XtIntervalId *id);
-
     static void
 SFscrollTimer(XtPointer p, XtIntervalId *id UNUSED)
 {
@@ -2131,8 +2072,6 @@
 	Ctrl<Key>M:	redraw-display()\n\
 ";
 
-static void SFexposeList(Widget w, XtPointer n, XEvent *event, Boolean *cont);
-
     static void
 SFexposeList(
     Widget	w UNUSED,
@@ -2146,8 +2085,6 @@
     SFdrawList((int)(long)n, SF_DO_NOT_SCROLL);
 }
 
-static void SFmodVerifyCallback(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
-
     static void
 SFmodVerifyCallback(
     Widget		w UNUSED,
@@ -2164,8 +2101,6 @@
 	SFstatus = SEL_FILE_TEXT;
 }
 
-static void SFokCallback(Widget w, XtPointer cl, XtPointer cd);
-
     static void
 SFokCallback(Widget w UNUSED, XtPointer cl UNUSED, XtPointer cd UNUSED)
 {
@@ -2178,8 +2113,6 @@
     { NULL, (XtPointer) NULL },
 };
 
-static void SFcancelCallback(Widget w, XtPointer cl, XtPointer cd);
-
     static void
 SFcancelCallback(Widget w UNUSED, XtPointer cl UNUSED, XtPointer cd UNUSED)
 {
@@ -2192,8 +2125,6 @@
     { NULL, (XtPointer) NULL },
 };
 
-static void SFdismissAction(Widget w, XEvent *event, String *params, Cardinal *num_params);
-
     static void
 SFdismissAction(
     Widget	w UNUSED,
