diff --git a/client/hostinfo_unix.cpp b/client/hostinfo_unix.cpp
index 6f0442ed1965867538278ff2bfb83d4fdb97725a..7e47237bcf74c9f38b44047efb32169ca3db020e 100644
--- a/client/hostinfo_unix.cpp
+++ b/client/hostinfo_unix.cpp
@@ -1224,33 +1224,47 @@ bool isDualGPUMacBook() {
 
 // see if Virtualbox is installed
 //
+static const struct dir_vbox_locations {
+    const char *dir;
+} vbox_locations[] = {
+    { "/usr/bin/VboxManage" },
+    { "/usr/local/bin/VboxManage" },
+    // add other ifdefs here as necessary.
+    { NULL },
+};
+
 int HOST_INFO::get_virtualbox_version() {
     char path[MAXPATHLEN];
     char cmd [MAXPATHLEN+35];
     char buf[256];
+	int i = 0;
     FILE* fd;
 
-    safe_strcpy(path, "/usr/bin/VBoxManage");
-
-    if (boinc_file_exists(path)) {
-        if (access(path, X_OK)) {
-            return 0;
-        }
-        safe_strcpy(cmd, path);
-        safe_strcat(cmd, " --version");
-        fd = popen(cmd, "r");
-        if (fd) {
-            if (fgets(buf, sizeof(buf), fd)) {
-                strip_whitespace(buf);
-                int n, a,b,c;
-                n = sscanf(buf, "%d.%d.%d", &a, &b, &c);
-                if (n == 3) {
-                    strcpy(virtualbox_version, buf);
-                }
-            }
-            pclose(fd);
-        }
-    }
+    do {
+		safe_strcpy(path, vbox_locations[i].dir);
+
+		if (boinc_file_exists(path)) {
+			if (access(path, X_OK)) {
+				return 0;
+			}
+			safe_strcpy(cmd, path);
+			safe_strcat(cmd, " --version");
+			fd = popen(cmd, "r");
+			if (fd) {
+				if (fgets(buf, sizeof(buf), fd)) {
+					strip_whitespace(buf);
+					int n, a,b,c;
+					n = sscanf(buf, "%d.%d.%d", &a, &b, &c);
+					if (n == 3) {
+						strcpy(virtualbox_version, buf);
+					}
+				}
+				pclose(fd);
+			}
+		}
+
+		++i;
+    } while (vbox_locations[i].dir != NULL);
 
     return 0;
 }