Index: libs/indibase/inditelescope.cpp
--- libs/indibase/inditelescope.cpp.orig
+++ libs/indibase/inditelescope.cpp
@@ -33,7 +33,11 @@
 #include <cstring>
 #include <ctime>
 #include <unistd.h>
+#ifdef __OpenBSD__
+#include <glob.h>
+#else
 #include <wordexp.h>
+#endif
 #include <limits>
 
 namespace INDI
@@ -1994,7 +1998,11 @@ bool Telescope::InitPark()
 
 const char *Telescope::LoadParkXML()
 {
+#ifdef __OpenBSD__
+    glob_t wexp;
+#else
     wordexp_t wexp;
+#endif
     FILE *fp = nullptr;
     LilXML *lp = nullptr;
     static char errmsg[512];
@@ -2010,6 +2018,20 @@ const char *Telescope::LoadParkXML()
     ParkpositionAxis1Xml = nullptr;
     ParkpositionAxis2Xml = nullptr;
 
+#ifdef __OpenBSD__
+    if (glob(ParkDataFileName.c_str(), GLOB_ERR, NULL, &wexp))
+    {
+        globfree(&wexp);
+        return "Badly formed filename.";
+    }
+
+    if (!(fp = fopen(wexp.gl_pathv[0], "r")))
+    {
+        globfree(&wexp);
+        return strerror(errno);
+    }
+    globfree(&wexp);
+#else
     if (wordexp(ParkDataFileName.c_str(), &wexp, 0))
     {
         wordfree(&wexp);
@@ -2022,6 +2044,7 @@ const char *Telescope::LoadParkXML()
         return strerror(errno);
     }
     wordfree(&wexp);
+#endif
 
     lp = newLilXML();
 
@@ -2126,7 +2149,11 @@ bool Telescope::PurgeParkData()
     if (LoadParkXML() != nullptr)
         LOG_DEBUG("Failed to refresh parking data.");
 
+#ifdef __OpenBSD__
+    glob_t wexp;
+#else
     wordexp_t wexp;
+#endif
     FILE *fp = nullptr;
     LilXML *lp = nullptr;
     static char errmsg[512];
@@ -2137,6 +2164,21 @@ bool Telescope::PurgeParkData()
 
     ParkDeviceName = getDeviceName();
 
+#ifdef __OpenBSD__
+    if (glob(ParkDataFileName.c_str(), GLOB_ERR, NULL, &wexp))
+    {
+        globfree(&wexp);
+        return "Badly formed filename.";
+    }
+
+    if (!(fp = fopen(wexp.gl_pathv[0], "r")))
+    {
+        globfree(&wexp);
+        LOGF_ERROR("Failed to purge park data: %s", strerror(errno));
+        return strerror(errno);
+    }
+    globfree(&wexp);
+#else
     if (wordexp(ParkDataFileName.c_str(), &wexp, 0))
     {
         wordfree(&wexp);
@@ -2150,6 +2192,7 @@ bool Telescope::PurgeParkData()
         return false;
     }
     wordfree(&wexp);
+#endif
 
     lp = newLilXML();
 
@@ -2201,6 +2244,16 @@ bool Telescope::PurgeParkData()
     ParkpositionAxis1Xml = nullptr;
     ParkpositionAxis2Xml = nullptr;
 
+#ifdef __OpenBSD__
+    glob(ParkDataFileName.c_str(), GLOB_ERR, NULL, &wexp);
+    if (!(fp = fopen(wexp.gl_pathv[0], "w")))
+    {
+        globfree(&wexp);
+        LOGF_INFO("WriteParkData: can not write file %s: %s", ParkDataFileName.c_str(), strerror(errno));
+        return false;
+    }
+    globfree(&wexp);
+#else
     wordexp(ParkDataFileName.c_str(), &wexp, 0);
     if (!(fp = fopen(wexp.we_wordv[0], "w")))
     {
@@ -2211,7 +2264,7 @@ bool Telescope::PurgeParkData()
     prXMLEle(fp, ParkdataXmlRoot, 0);
     fclose(fp);
     wordfree(&wexp);
-
+#endif
     return true;
 }
 
@@ -2222,11 +2275,32 @@ bool Telescope::WriteParkData()
     if (LoadParkXML() != nullptr)
         LOG_DEBUG("Failed to refresh parking data.");
 
+#ifdef __OpenBSD__
+    glob_t wexp;
+#else
     wordexp_t wexp;
+#endif
     FILE *fp;
     char pcdata[30];
     ParkDeviceName = getDeviceName();
 
+#ifdef __OpenBSD__
+    if (glob(ParkDataFileName.c_str(), GLOB_ERR, NULL, &wexp))
+    {
+        globfree(&wexp);
+        LOGF_INFO("WriteParkData: can not write file %s: Badly formed filename.",
+                  ParkDataFileName.c_str());
+        return false;
+    }
+
+    if (!(fp = fopen(wexp.gl_pathv[0], "w")))
+    {
+        globfree(&wexp);
+        LOGF_INFO("WriteParkData: can not write file %s: %s", ParkDataFileName.c_str(),
+                  strerror(errno));
+        return false;
+    }
+#else
     if (wordexp(ParkDataFileName.c_str(), &wexp, 0))
     {
         wordfree(&wexp);
@@ -2242,6 +2316,7 @@ bool Telescope::WriteParkData()
                   strerror(errno));
         return false;
     }
+#endif
 
     if (!ParkdataXmlRoot)
         ParkdataXmlRoot = addXMLEle(nullptr, "parkdata");
@@ -2270,7 +2345,11 @@ bool Telescope::WriteParkData()
 
     prXMLEle(fp, ParkdataXmlRoot, 0);
     fclose(fp);
+#ifdef __OpenBSD__
+    globfree(&wexp);
+#else
     wordfree(&wexp);
+#endif
 
     return true;
 }
