diff --git a/common/Makefile.am b/common/Makefile.am
index d288fa36b..94318dae4 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -49,7 +49,7 @@ common_sources = \
 	strlist.c strlist.h \
 	utf8conv.c utf8conv.h \
 	argparse.c argparse.h \
-	logging.h  \
+	logging.c logging.h  \
 	dotlock.c dotlock.h  \
         mischelp.c mischelp.h \
 	status.c status.h\
diff --git a/common/init.c b/common/init.c
index f62c5cd58..86b71e5ee 100644
--- a/common/init.c
+++ b/common/init.c
@@ -210,11 +210,7 @@ _init_common_subsystems (gpg_err_source_t errsource, int *argcp, char ***argvp)
   }
 
   /* --version et al shall use estream as well.  */
-  argparse_register_outfnc (writestring_via_estream);  /* legacy. */
-  gpgrt_set_usage_outfnc (writestring_via_estream);
-
-  /* Register our string mapper with gpgrt.  */
-  gpgrt_set_fixed_string_mapper (map_static_macro_string);
+  argparse_register_outfnc (writestring_via_estream);
 
   /* Logging shall use the standard socket directory as fallback.  */
   log_set_socket_dir_cb (gnupg_socketdir);
diff --git a/common/logging.h b/common/logging.h
index a5800cb4c..a20b8f895 100644
--- a/common/logging.h
+++ b/common/logging.h
@@ -38,9 +38,10 @@
 #include "mischelp.h"
 #include "w32help.h"
 
-/* We use the libgpg-error provided log functions.  but we need one
- * more function:  */
-#ifdef GPGRT_HAVE_MACRO_FUNCTION
+#if defined(GPGRT_ENABLE_LOG_MACROS) && defined(log_debug_string)
+  /* We use the libgpg-error provided log functions.  but we need one
+   * more function:  */
+# ifdef GPGRT_HAVE_MACRO_FUNCTION
 #  define BUG() bug_at ( __FILE__, __LINE__, __FUNCTION__)
 static inline void bug_at (const char *file, int line, const char *func)
                            GPGRT_ATTR_NORETURN;
@@ -61,9 +62,94 @@ bug_at (const char *file, int line)
   gpgrt_log (GPGRT_LOGLVL_BUG, "there is a bug at %s:%d\n", file, line);
   abort ();
 }
+# endif /*!GPGRT_HAVE_MACRO_FUNCTION*/
+
+
+#else /* Use gnupg internal logging functions.  */
+
+int  log_get_errorcount (int clear);
+void log_inc_errorcount (void);
+void log_set_file( const char *name );
+void log_set_fd (int fd);
+void log_set_socket_dir_cb (const char *(*fnc)(void));
+void log_set_pid_suffix_cb (int (*cb)(unsigned long *r_value));
+void log_set_prefix (const char *text, unsigned int flags);
+const char *log_get_prefix (unsigned int *flags);
+int log_test_fd (int fd);
+int  log_get_fd(void);
+estream_t log_get_stream (void);
+
+#ifdef GPGRT_HAVE_MACRO_FUNCTION
+  void bug_at (const char *file, int line, const char *func)
+               GPGRT_ATTR_NORETURN;
+  void _log_assert (const char *expr, const char *file, int line,
+                    const char *func) GPGRT_ATTR_NORETURN;
+# define BUG() bug_at( __FILE__ , __LINE__, __FUNCTION__)
+# define log_assert(expr)                                       \
+  ((expr)                                                       \
+   ? (void) 0                                                   \
+   : _log_assert (#expr, __FILE__, __LINE__, __FUNCTION__))
+#else /*!GPGRT_HAVE_MACRO_FUNCTION*/
+  void bug_at (const char *file, int line);
+  void _log_assert (const char *expr, const char *file, int line);
+# define BUG() bug_at( __FILE__ , __LINE__ )
+# define log_assert(expr)                                       \
+  ((expr)                                                       \
+   ? (void) 0                                                   \
+   : _log_assert (#expr, __FILE__, __LINE__))
 #endif /*!GPGRT_HAVE_MACRO_FUNCTION*/
 
+/* Flag values for log_set_prefix. */
+#define GPGRT_LOG_WITH_PREFIX  1
+#define GPGRT_LOG_WITH_TIME    2
+#define GPGRT_LOG_WITH_PID     4
+#define GPGRT_LOG_RUN_DETACHED 256
+#define GPGRT_LOG_NO_REGISTRY  512
+
+/* Log levels as used by log_log.  */
+enum jnlib_log_levels {
+    GPGRT_LOG_BEGIN,
+    GPGRT_LOG_CONT,
+    GPGRT_LOG_INFO,
+    GPGRT_LOG_WARN,
+    GPGRT_LOG_ERROR,
+    GPGRT_LOG_FATAL,
+    GPGRT_LOG_BUG,
+    GPGRT_LOG_DEBUG
+};
+#define GPGRT_LOGLVL_BEGIN  GPGRT_LOG_BEGIN
+#define GPGRT_LOGLVL_CONT   GPGRT_LOG_CONT
+#define GPGRT_LOGLVL_INFO   GPGRT_LOG_INFO
+#define GPGRT_LOGLVL_WARN   GPGRT_LOG_WARN
+#define GPGRT_LOGLVL_ERROR  GPGRT_LOG_ERROR
+#define GPGRT_LOGLVL_FATAL  GPGRT_LOG_FATAL
+#define GPGRT_LOGLVL_BUG    GPGRT_LOG_BUG
+#define GPGRT_LOGLVL_DEBUG  GPGRT_LOG_DEBUG
+
+void log_log (int level, const char *fmt, ...) GPGRT_ATTR_PRINTF(2,3);
+void log_logv (int level, const char *fmt, va_list arg_ptr);
+void log_logv_prefix (int level, const char *prefix,
+                      const char *fmt, va_list arg_ptr);
+void log_string (int level, const char *string);
+void log_bug (const char *fmt, ...)    GPGRT_ATTR_NR_PRINTF(1,2);
+void log_fatal (const char *fmt, ...)  GPGRT_ATTR_NR_PRINTF(1,2);
+void log_error (const char *fmt, ...)  GPGRT_ATTR_PRINTF(1,2);
+void log_info (const char *fmt, ...)   GPGRT_ATTR_PRINTF(1,2);
+void log_debug (const char *fmt, ...)  GPGRT_ATTR_PRINTF(1,2);
+void log_debug_string (const char *string, const char *fmt,
+                       ...) GPGRT_ATTR_PRINTF(2,3);
+void log_printf (const char *fmt, ...) GPGRT_ATTR_PRINTF(1,2);
+void log_flush (void);
+
+/* Print a hexdump of BUFFER.  With TEXT passes as NULL print just the
+   raw dump, with TEXT being an empty string, print a trailing
+   linefeed, otherwise print an entire debug line with TEXT followed
+   by the hexdump and a final LF.  */
+void log_printhex (const void *buffer, size_t length, const char *text);
+
+void log_clock (const char *fmt, ...) GPGRT_ATTR_PRINTF(1,2);
 
+#endif /* Use gnupg internal logging functions.  */
 
 /* Some handy assertion macros which don't abort.  */
 
diff --git a/common/util.h b/common/util.h
index 682415d92..d5bbdf134 100644
--- a/common/util.h
+++ b/common/util.h
@@ -39,6 +39,21 @@
  * libgpg-error version.  Define them here.
  * Example: (#if GPG_ERROR_VERSION_NUMBER < 0x011500 // 1.21)
  */
+#if GPG_ERROR_VERSION_NUMBER < 0x011a00 /* 1.26 */
+# define GPG_ERR_UNKNOWN_FLAG     309
+# define GPG_ERR_INV_ORDER	  310
+# define GPG_ERR_ALREADY_FETCHED  311
+# define GPG_ERR_TRY_LATER        312
+# define GPG_ERR_SYSTEM_BUG	  666
+# define GPG_ERR_DNS_UNKNOWN	  711
+# define GPG_ERR_DNS_SECTION	  712
+# define GPG_ERR_DNS_ADDRESS	  713
+# define GPG_ERR_DNS_NO_QUERY	  714
+# define GPG_ERR_DNS_NO_ANSWER	  715
+# define GPG_ERR_DNS_CLOSED	  716
+# define GPG_ERR_DNS_VERIFY	  717
+# define GPG_ERR_DNS_TIMEOUT	  718
+#endif
 
 
 /* Hash function used with libksba. */
diff --git a/configure.ac b/configure.ac
index 795daa400..9047bfe8d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -53,7 +53,7 @@ AC_INIT([mym4_package],[mym4_version], [https://bugs.gnupg.org])
 # build-aux/speedo.mk and Makefile.am
 AC_DEFINE_UNQUOTED(GNUPG_SWDB_TAG, "gnupg24", [swdb tag for this branch])
 
-NEED_GPG_ERROR_VERSION=1.29
+NEED_GPG_ERROR_VERSION=1.24
 
 NEED_LIBGCRYPT_API=1
 NEED_LIBGCRYPT_VERSION=1.7.0
