diff --git a/vehicle/OVMS.V3/main/ovms_command.cpp b/vehicle/OVMS.V3/main/ovms_command.cpp
index b162d1ca..b5fffde5 100644
--- a/vehicle/OVMS.V3/main/ovms_command.cpp
+++ b/vehicle/OVMS.V3/main/ovms_command.cpp
@@ -223,9 +223,9 @@ OvmsCommand::OvmsCommand()
   m_parent = NULL;
   }
 
-OvmsCommand::OvmsCommand(const char* name, const char* title, void (*execute)(int, OvmsWriter*, OvmsCommand*, int, const char* const*),
+OvmsCommand::OvmsCommand(const char* name, const char* title, OvmsCommandExecuteCallback_t execute,
                          const char *usage, int min, int max, bool secure,
-                         int (*validate)(OvmsWriter*, OvmsCommand*, int, const char* const*, bool))
+                         OvmsCommandValidateCallback_t validate)
   {
   m_name = name;
   m_title = title;
@@ -383,9 +383,9 @@ void OvmsCommand::ExpandUsage(const char* templ, OvmsWriter* writer, std::string
   result += usage.substr(pos);
   }
 
-OvmsCommand* OvmsCommand::RegisterCommand(const char* name, const char* title, void (*execute)(int, OvmsWriter*, OvmsCommand*, int, const char* const*),
+OvmsCommand* OvmsCommand::RegisterCommand(const char* name, const char* title, OvmsCommandExecuteCallback_t execute,
                                           const char *usage, int min, int max, bool secure,
-                                          int (*validate)(OvmsWriter*, OvmsCommand*, int, const char* const*, bool))
+                                          OvmsCommandValidateCallback_t validate)
   {
   // Protect against duplicate registrations
   OvmsCommand* cmd = FindCommand(name);
@@ -855,7 +855,7 @@ void OvmsCommandApp::ConfigureLogging()
   ReadConfig();
   }
 
-OvmsCommand* OvmsCommandApp::RegisterCommand(const char* name, const char* title, void (*execute)(int, OvmsWriter*, OvmsCommand*, int, const char* const*),
+OvmsCommand* OvmsCommandApp::RegisterCommand(const char* name, const char* title, OvmsCommandExecuteCallback_t execute,
                                              const char *usage, int min, int max, bool secure)
   {
   return m_root.RegisterCommand(name, title, execute, usage, min, max, secure);
diff --git a/vehicle/OVMS.V3/main/ovms_command.h b/vehicle/OVMS.V3/main/ovms_command.h
index 7c1b0c55..ab1f4355 100644
--- a/vehicle/OVMS.V3/main/ovms_command.h
+++ b/vehicle/OVMS.V3/main/ovms_command.h
@@ -35,6 +35,7 @@
 #include <string>
 #include <map>
 #include <set>
+#include <functional>
 #include <limits.h>
 #include "ovms.h"
 #include "ovms_mutex.h"
@@ -178,21 +179,24 @@ class OvmsCommandMap : public std::map<const char*, OvmsCommand*, CompareCharPtr
     char** GetCompletion(OvmsWriter* writer, const char* token);
   };
 
+typedef std::function<void(int, OvmsWriter*, OvmsCommand*, int, const char* const*)> OvmsCommandExecuteCallback_t;
+typedef std::function<int(OvmsWriter*, OvmsCommand*, int, const char* const*, bool)> OvmsCommandValidateCallback_t;
+
 class OvmsCommand : public ExternalRamAllocated
   {
   public:
     OvmsCommand();
     OvmsCommand(const char* name, const char* title,
-		void (*execute)(int, OvmsWriter*, OvmsCommand*, int, const char* const*),
+                OvmsCommandExecuteCallback_t execute,
                 const char *usage, int min, int max, bool secure,
-                int (*validate)(OvmsWriter*, OvmsCommand*, int, const char* const*, bool));
+                OvmsCommandValidateCallback_t validate);
     virtual ~OvmsCommand();
 
   public:
     OvmsCommand* RegisterCommand(const char* name, const char* title,
-                                 void (*execute)(int, OvmsWriter*, OvmsCommand*, int, const char* const*) = NULL,
+                                 OvmsCommandExecuteCallback_t execute = NULL,
                                  const char *usage = "", int min = 0, int max = 0, bool secure = true,
-                                 int (*validate)(OvmsWriter*, OvmsCommand*, int, const char* const*, bool) = NULL);
+                                 OvmsCommandValidateCallback_t validate = NULL);
     bool UnregisterCommand(const char* name = NULL);
     const char* GetName();
     const char* GetTitle();
@@ -210,8 +214,8 @@ class OvmsCommand : public ExternalRamAllocated
   protected:
     const char* m_name;
     const char* m_title;
-    void (*m_execute)(int, OvmsWriter*, OvmsCommand*, int, const char* const*);
-    int (*m_validate)(OvmsWriter*, OvmsCommand*, int, const char* const*, bool);
+    OvmsCommandExecuteCallback_t m_execute;
+    OvmsCommandValidateCallback_t m_validate;
     const char* m_usage_template;
     int m_min;
     int m_max;
@@ -258,7 +262,7 @@ class OvmsCommandApp : public OvmsWriter
 
   public:
     OvmsCommand* RegisterCommand(const char* name, const char* title,
-                                 void (*execute)(int, OvmsWriter*, OvmsCommand*, int, const char* const*) = NULL,
+                                 OvmsCommandExecuteCallback_t execute = NULL,
                                  const char *usage = "", int min = 0, int max = 0, bool secure = true);
     bool UnregisterCommand(const char* name);
     OvmsCommand* FindCommand(const char* name);
