diff --git a/cw_decred/lib/api/libdcrwallet.dart b/cw_decred/lib/api/libdcrwallet.dart
index 2166a7f10..ad9d66122 100644
--- a/cw_decred/lib/api/libdcrwallet.dart
+++ b/cw_decred/lib/api/libdcrwallet.dart
@@ -239,3 +239,28 @@ String signMessage(Map<String, String> args) {
   );
   return res.payload;
 }
+
+String? newExternalAddress(String walletName) {
+  final cName = walletName.toCString();
+  final res = executePayloadFn(
+    fn: () => dcrwalletApi.newExternalAddress(cName),
+    ptrsToFree: [cName],
+    skipErrorCheck: true, // errCode is checked below, before checking err
+  );
+  if (res.errCode == ErrCodeNotSynced) {
+    // Wallet is not synced. We do not want to give out a used address so give
+    // nothing.
+    return null;
+  }
+  checkErr(res.err);
+  return res.payload;
+}
+
+String addresses(String walletName) {
+  final cName = walletName.toCString();
+  final res = executePayloadFn(
+    fn: () => dcrwalletApi.addresses(cName),
+    ptrsToFree: [cName],
+  );
+  return res.payload;
+}
diff --git a/cw_decred/lib/wallet_addresses.dart b/cw_decred/lib/wallet_addresses.dart
index e46628cf8..dc96a3846 100644
--- a/cw_decred/lib/wallet_addresses.dart
+++ b/cw_decred/lib/wallet_addresses.dart
@@ -1,3 +1,5 @@
+import 'dart:convert';
+
 import 'package:cw_core/wallet_addresses.dart';
 import 'package:cw_core/wallet_info.dart';
 import 'package:cw_decred/api/libdcrwallet.dart' as libdcrwallet;
@@ -11,13 +13,13 @@ class DecredWalletAddresses extends WalletAddresses {
   }
 
   String generateNewAddress() {
-    // TODO: generate new external address with libdcrwallet.
-    return "DsT4qJPPaYEuQRimfgvSKxKH3paysn1x3Nt";
+    return libdcrwallet.newExternalAddress(walletInfo.name) ?? '';
   }
 
   List<String> addresses() {
-    final currentAddress = libdcrwallet.currentReceiveAddress(walletInfo.name);
-    return currentAddress == null ? [] : [currentAddress];
+    final res = libdcrwallet.addresses(walletInfo.name);
+    final addrs = (json.decode(res) as List<dynamic>).cast<String>();
+    return addrs;
   }
 
   @override