diff --git a/src/gui_at_fs.c b/src/gui_at_fs.c
index 0206284..25767c2 100644
--- a/src/gui_at_fs.c
+++ b/src/gui_at_fs.c
@@ -1641,7 +1641,8 @@
 
     if (SFbuttonPressed)
 	SFscrollTimerId = XtAppAddTimeOut(SFapp,
-		       SFscrollTimerInterval(), SFscrollTimer, (XtPointer) n);
+		       SFscrollTimerInterval(), SFscrollTimer,
+		       (XtPointer)(long_u)n);
 }
 
     static int
@@ -1684,7 +1685,7 @@
 		SFscrollTimerAdded = 1;
 		SFscrollTimerId = XtAppAddTimeOut(SFapp,
 			SFscrollTimerInterval(), SFscrollTimer,
-			(XtPointer) n);
+			(XtPointer)(long_u)n);
 	    }
 	}
 	return -1;
@@ -2587,7 +2588,8 @@
 		    NULL);
 
 	XtAddCallback(selFileVScrolls[n], XtNjumpProc,
-		(XtCallbackProc)SFvFloatSliderMovedCallback, (XtPointer)n);
+		(XtCallbackProc)SFvFloatSliderMovedCallback,
+		(XtPointer)(long_u)n);
 	XtAddCallback(selFileVScrolls[n], XtNscrollProc,
 		(XtCallbackProc)SFvAreaSelectedCallback, (XtPointer)n);
 
@@ -2611,7 +2613,8 @@
 		    NULL);
 
 	XtAddCallback(selFileHScrolls[n], XtNjumpProc,
-		(XtCallbackProc)SFhSliderMovedCallback, (XtPointer)n);
+		(XtCallbackProc)SFhSliderMovedCallback,
+		(XtPointer)(long_u)n);
 	XtAddCallback(selFileHScrolls[n], XtNscrollProc,
 		(XtCallbackProc)SFhAreaSelectedCallback, (XtPointer)n);
     }
@@ -2663,17 +2666,17 @@
     for (n = 0; n < 3; n++)
     {
 	XtAddEventHandler(selFileLists[n], ExposureMask, True,
-		(XtEventHandler)SFexposeList, (XtPointer)n);
+		(XtEventHandler)SFexposeList, (XtPointer)(long_u)n);
 	XtAddEventHandler(selFileLists[n], EnterWindowMask, False,
-		(XtEventHandler)SFenterList, (XtPointer)n);
+		(XtEventHandler)SFenterList, (XtPointer)(long_u)n);
 	XtAddEventHandler(selFileLists[n], LeaveWindowMask, False,
-		(XtEventHandler)SFleaveList, (XtPointer)n);
+		(XtEventHandler)SFleaveList, (XtPointer)(long_u)n);
 	XtAddEventHandler(selFileLists[n], PointerMotionMask, False,
-		(XtEventHandler)SFmotionList, (XtPointer)n);
+		(XtEventHandler)SFmotionList, (XtPointer)(long_u)n);
 	XtAddEventHandler(selFileLists[n], ButtonPressMask, False,
-		(XtEventHandler)SFbuttonPressList, (XtPointer)n);
+		(XtEventHandler)SFbuttonPressList, (XtPointer)(long_u)n);
 	XtAddEventHandler(selFileLists[n], ButtonReleaseMask, False,
-		(XtEventHandler)SFbuttonReleaseList, (XtPointer)n);
+		(XtEventHandler)SFbuttonReleaseList, (XtPointer)(long_u)n);
     }
 
     XtAddEventHandler(selFileField, KeyPressMask, False,
diff --git a/src/gui_at_sb.c b/src/gui_at_sb.c
index 16d8d36..6cf1e7b 100644
--- a/src/gui_at_sb.c
+++ b/src/gui_at_sb.c
@@ -820,7 +820,7 @@
     if (mode == SMODE_PAGE_UP || mode == SMODE_LINE_UP)
 	call_data = -call_data;
 
-    XtCallCallbacks((Widget)sbw, XtNscrollProc, (XtPointer)call_data);
+    XtCallCallbacks((Widget)sbw, XtNscrollProc, (XtPointer)(long_u)call_data);
 
     sbw->scrollbar.timer_id =
 	XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)sbw),
@@ -894,7 +894,7 @@
 	return;
 
     sbw->scrollbar.scroll_mode = SMODE_LINE_UP;
-    XtCallCallbacks(w, XtNscrollProc, (XtPointer)call_data);
+    XtCallCallbacks(w, XtNscrollProc, (XtPointer)(long_u)call_data);
 }
 
     static void
@@ -977,7 +977,7 @@
     }
 
     if (call_data)
-	XtCallCallbacks(w, XtNscrollProc, (XtPointer)call_data);
+	XtCallCallbacks(w, XtNscrollProc, (XtPointer)(long_u)call_data);
 
     /* establish autoscroll */
     if (delay)
diff --git a/src/gui_athena.c b/src/gui_athena.c
index f5b8f70..ffb65ae 100644
--- a/src/gui_athena.c
+++ b/src/gui_athena.c
@@ -1270,7 +1270,7 @@
 		return;
 
 	    /* If there are other "pulldown" items in this pane, then adjust
-	     * the right margin to accomodate the arrow pixmap, otherwise
+	     * the right margin to accommodate the arrow pixmap, otherwise
 	     * the right margin will be the same as the left margin.
 	     */
 	    {
@@ -2254,7 +2254,7 @@
 		    vertical ? XtNfromVert : XtNfromHoriz, prev_dialogButton,
 		    NULL);
 
-	XtAddCallback(dialogButton, XtNcallback, butproc, (XtPointer)butcount);
+	XtAddCallback(dialogButton, XtNcallback, butproc, (XtPointer)(long_u)butcount);
 	p = next;
 	prev_dialogButton = dialogButton;
     }
diff --git a/src/if_perl.xs b/src/if_perl.xs
index 5c0c8ea..1a83de4 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -696,7 +696,9 @@
     char	*script;
     STRLEN	length;
     SV		*sv;
+#ifdef HAVE_SANDBOX
     SV		*safe;
+#endif
 
     script = (char *)script_get(eap, eap->arg);
     if (eap->skip)
diff --git a/src/screen.c b/src/screen.c
index 3205d3d..1753330 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -297,7 +297,7 @@
 #endif
 }
 
-#if defined(FEAT_RUBY) || defined(FEAT_VISUAL) || \
+#if defined(FEAT_RUBY) || defined(FEAT_PERL) || defined(FEAT_VISUAL) || \
     (defined(FEAT_CLIPBOARD) && defined(FEAT_X11)) || defined(PROTO)
 /*
  * update all windows that are editing the current buffer
