diff --git a/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/Exporter.java b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/Exporter.java
index 4439a88..fee79bf 100644
--- a/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/Exporter.java
+++ b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/Exporter.java
@@ -25,13 +25,9 @@
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamWriter;
 
-import org.apache.activemq.artemis.api.core.RoutingType;
-import org.apache.activemq.artemis.jms.client.ActiveMQDestination;
 import org.apache.activemq.cli.artemis.schema.ArtemisJournalMarshaller;
 import org.apache.activemq.cli.kahadb.exporter.artemis.ArtemisXmlMessageRecoveryListener;
-import org.apache.activemq.cli.schema.QueueBindingType;
-import org.apache.activemq.command.ActiveMQTopic;
-import org.apache.activemq.command.SubscriptionInfo;
+import org.apache.activemq.cli.kahadb.exporter.artemis.ArtemisXmlMetadataExporter;
 import org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,43 +63,20 @@
         try(OutputStream fos = new BufferedOutputStream(compress ? new GZIPOutputStream(
                 new FileOutputStream(artemisXml)) : new FileOutputStream(artemisXml))) {
 
-            XMLStreamWriter xmlWriter = XMLOutputFactory.newFactory().createXMLStreamWriter(fos);
-            ArtemisJournalMarshaller xmlMarshaller = new ArtemisJournalMarshaller(xmlWriter);
+            final XMLStreamWriter xmlWriter = XMLOutputFactory.newFactory().createXMLStreamWriter(fos);
+            final ArtemisJournalMarshaller xmlMarshaller = new ArtemisJournalMarshaller(xmlWriter);
+            final KahaDBExporter dbExporter = new KahaDBExporter(adapter,
+                    new ArtemisXmlMetadataExporter(adapter.getStore(), xmlMarshaller),
+                    new ArtemisXmlMessageRecoveryListener(adapter.getStore(), xmlMarshaller));
 
             xmlMarshaller.appendJournalOpen();
             xmlMarshaller.appendBindingsElement();
-
-            adapter.getStore().getDestinations().stream()
-                .forEach(dest -> {
-                    try {
-                        if (dest.isQueue()) {
-                            xmlMarshaller.appendBinding(QueueBindingType.builder()
-                                    .withName(dest.getPhysicalName())
-                                    .withRoutingType(RoutingType.ANYCAST.toString())
-                                    .withAddress(dest.getPhysicalName()).build());
-                        } else if (dest.isTopic()) {
-                                for (SubscriptionInfo info :
-                                    adapter.getStore().createTopicMessageStore((ActiveMQTopic) dest).getAllSubscriptions()) {
-                                    xmlMarshaller.appendBinding(QueueBindingType.builder()
-                                            .withName(ActiveMQDestination.createQueueNameForDurableSubscription(
-                                                    true, info.getClientId(), info.getSubcriptionName()))
-                                            .withRoutingType(RoutingType.MULTICAST.toString())
-                                            .withAddress(dest.getPhysicalName()).build());
-                                }
-                        }
-                    } catch (Exception e) {
-                        throw new IllegalStateException(e);
-                    }
-                });
-
+            dbExporter.exportMetadata();
             xmlMarshaller.appendEndElement();
             xmlMarshaller.appendMessagesElement();
-
-            KahaDBExporter dbExporter = new KahaDBExporter(adapter,
-                    new ArtemisXmlMessageRecoveryListener(adapter.getStore(), xmlMarshaller));
-
             dbExporter.exportQueues();
             dbExporter.exportTopics();
+            xmlMarshaller.appendEndElement();
             xmlMarshaller.appendJournalClose(true);
         } finally {
             adapter.stop();
diff --git a/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/KahaDBExporter.java b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/KahaDBExporter.java
index 7eee0aa..dbe0114 100644
--- a/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/KahaDBExporter.java
+++ b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/KahaDBExporter.java
@@ -25,7 +25,6 @@
 import org.apache.activemq.command.ActiveMQTopic;
 import org.apache.activemq.store.MessageRecoveryListener;
 import org.apache.activemq.store.MessageStore;
-import org.apache.activemq.store.TopicMessageStore;
 import org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
 import org.apache.activemq.util.IOExceptionSupport;
 import org.slf4j.Logger;
@@ -36,26 +35,44 @@
     static final Logger LOG = LoggerFactory.getLogger(KahaDBExporter.class);
 
     private final KahaDBPersistenceAdapter adapter;
+    private final MessageStoreMetadataExporter metadataExporter;
     private final MessageRecoveryListener recoveryListener;
 
-    public KahaDBExporter (final KahaDBPersistenceAdapter adapter,
+    public KahaDBExporter(final KahaDBPersistenceAdapter adapter,
+            final MessageStoreMetadataExporter metadataExporter,
             final MessageRecoveryListener recoveryListener) {
         this.adapter = adapter;
+        this.metadataExporter = metadataExporter;
         this.recoveryListener = recoveryListener;
     }
 
+
+    @Override
+    public void exportMetadata() throws IOException {
+        metadataExporter.export();
+    }
+
     @Override
     public void exportQueues() throws IOException {
+        exportDestinations(ActiveMQDestination.QUEUE_TYPE);
+    }
 
+    @Override
+    public void exportTopics() throws IOException {
+        exportDestinations(ActiveMQDestination.TOPIC_TYPE);
+    }
+
+    private void exportDestinations(byte destType) throws IOException {
         final Set<ActiveMQDestination> destinations = adapter.getDestinations().stream().filter(
-                dest -> dest.isQueue()).collect(Collectors.toSet());
+                dest -> dest.getDestinationType() == destType).collect(Collectors.toSet());
 
         // loop through all queues and export them
         for (final ActiveMQDestination destination : destinations) {
 
             LOG.info("Starting export of: " + destination);
-            final ActiveMQQueue queue = (ActiveMQQueue) destination;
-            final MessageStore messageStore = adapter.createQueueMessageStore(queue);
+            final MessageStore messageStore = destination.isQueue() ?
+                    adapter.createQueueMessageStore((ActiveMQQueue) destination) :
+                    adapter.createTopicMessageStore((ActiveMQTopic) destination);
 
             try {
                 // migrate the data
@@ -66,24 +83,4 @@
         }
     }
 
-    @Override
-    public void exportTopics() throws IOException {
-
-        final Set<ActiveMQDestination> destinations = adapter.getDestinations().stream().filter(
-                dest -> dest.isTopic()).collect(Collectors.toSet());
-
-        for (ActiveMQDestination destination : destinations) {
-            LOG.info("Starting export of: " + destination);
-
-            final ActiveMQTopic topic = (ActiveMQTopic) destination;
-            final TopicMessageStore messageStore = adapter.createTopicMessageStore(topic);
-
-            //recover topic
-            try {
-                messageStore.recover(recoveryListener);
-            } catch (Exception e) {
-                IOExceptionSupport.create(e);
-            }
-        }
-    }
 }
diff --git a/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/MessageStoreExporter.java b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/MessageStoreExporter.java
index b228e19..b1217b4 100644
--- a/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/MessageStoreExporter.java
+++ b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/MessageStoreExporter.java
@@ -20,6 +20,8 @@
 
 public interface MessageStoreExporter {
 
+    public void exportMetadata() throws IOException;
+
     public void exportQueues() throws IOException;
 
     public void exportTopics() throws IOException;
diff --git a/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/MessageStoreMetadataExporter.java b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/MessageStoreMetadataExporter.java
new file mode 100644
index 0000000..994528b
--- /dev/null
+++ b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/MessageStoreMetadataExporter.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.cli.kahadb.exporter;
+
+import java.io.IOException;
+
+public interface MessageStoreMetadataExporter {
+
+    public void export() throws IOException;
+}
diff --git a/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/artemis/ArtemisXmlMetadataExporter.java b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/artemis/ArtemisXmlMetadataExporter.java
new file mode 100644
index 0000000..216a6a3
--- /dev/null
+++ b/activemq-kahadb-exporter/src/main/java/org/apache/activemq/cli/kahadb/exporter/artemis/ArtemisXmlMetadataExporter.java
@@ -0,0 +1,74 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.cli.kahadb.exporter.artemis;
+
+import java.io.IOException;
+
+import org.apache.activemq.artemis.api.core.RoutingType;
+import org.apache.activemq.artemis.jms.client.ActiveMQDestination;
+import org.apache.activemq.cli.artemis.schema.ArtemisJournalMarshaller;
+import org.apache.activemq.cli.kahadb.exporter.MessageStoreMetadataExporter;
+import org.apache.activemq.cli.schema.QueueBindingType;
+import org.apache.activemq.command.ActiveMQTopic;
+import org.apache.activemq.command.SubscriptionInfo;
+import org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
+import org.apache.activemq.store.kahadb.KahaDBStore;
+
+public class ArtemisXmlMetadataExporter implements MessageStoreMetadataExporter {
+
+    private final KahaDBStore store;
+    private final ArtemisJournalMarshaller xmlMarshaller;
+
+
+    /**
+     * @param xmlMarshaller
+     */
+    public ArtemisXmlMetadataExporter(final KahaDBStore store,
+            final ArtemisJournalMarshaller xmlMarshaller) {
+        super();
+        this.store = store;
+        this.xmlMarshaller = xmlMarshaller;
+    }
+
+    @Override
+    public void export() throws IOException {
+        store.getDestinations().stream()
+        .forEach(dest -> {
+            try {
+                if (dest.isQueue()) {
+                    xmlMarshaller.appendBinding(QueueBindingType.builder()
+                            .withName(dest.getPhysicalName())
+                            .withRoutingType(RoutingType.ANYCAST.toString())
+                            .withAddress(dest.getPhysicalName()).build());
+                } else if (dest.isTopic()) {
+                        for (SubscriptionInfo info :
+                            store.createTopicMessageStore((ActiveMQTopic) dest).getAllSubscriptions()) {
+                            xmlMarshaller.appendBinding(QueueBindingType.builder()
+                                    .withName(ActiveMQDestination.createQueueNameForDurableSubscription(
+                                            true, info.getClientId(), info.getSubcriptionName()))
+                                    .withRoutingType(RoutingType.MULTICAST.toString())
+                                    .withAddress(dest.getPhysicalName()).build());
+                        }
+                }
+            } catch (Exception e) {
+                throw new IllegalStateException(e);
+            }
+        });
+
+    }
+
+}
