diff --git a/package.json b/package.json
index 2095da5f959299447aa756508e864742b901cf8b..a391ed90cf2b8f86881d721d07f169c2bdc2cbb6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "usp-js",
-  "version": "0.1.8",
+  "version": "0.1.9",
   "description": "Helper library for easy usp communication using mqtt over tcp or ws.",
   "main": "build/src/index.js",
   "scripts": {
diff --git a/public/index.html b/public/index.html
index 38efcfd39bfc8aeb4ab19eb04fc0218fbf3fb767..202faa825b3a5074ea4cbc5f5c3a7a4737175baa 100644
--- a/public/index.html
+++ b/public/index.html
@@ -171,6 +171,10 @@ run();</code></pre>
 							<li>add with no arguments - adds a new default object</li>
 						</ul>
 						<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.add(<span class="hljs-string">&quot;Device.NAT.PortMapping.&quot;</span>); <span class="hljs-comment">// =&gt; &quot;Device.NAT.PortMapping.3.&quot;</span></code></pre>
+						<ul>
+							<li>add with multiple responses</li>
+						</ul>
+						<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.add(<span class="hljs-string">&quot;Device.IP.Interface.*.IPv4Address.&quot;</span>); <span class="hljs-comment">// =&gt; [&#x27;Device.IP.Interface.1.IPv4Address.2.&#x27;, ... ]</span></code></pre>
 						<ul>
 							<li>add with arguments - adds a new object with provided values</li>
 						</ul>
diff --git a/public/modules/_commands_add_.html b/public/modules/_commands_add_.html
index f5a78c5e034791566ea6a129dcc07d56532c4ef0..cec706e9e4d6765d56d3a4590a110b898b02da02 100644
--- a/public/modules/_commands_add_.html
+++ b/public/modules/_commands_add_.html
@@ -87,7 +87,7 @@
 					<a name="decode" class="tsd-anchor"></a>
 					<h3><span class="tsd-flag ts-flagConst">Const</span> decode</h3>
 					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
-						<li class="tsd-signature tsd-kind-icon">decode<span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]</span></li>
+						<li class="tsd-signature tsd-kind-icon">decode<span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">]</span></li>
 					</ul>
 					<ul class="tsd-descriptions">
 						<li class="tsd-description">
@@ -102,7 +102,7 @@
 									<h5>msg: <span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span></h5>
 								</li>
 							</ul>
-							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]</span></h4>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">]</span></h4>
 						</li>
 					</ul>
 				</section>
@@ -116,7 +116,7 @@
 						<li class="tsd-description">
 							<aside class="tsd-sources">
 								<ul>
-									<li>Defined in commands/add.ts:12</li>
+									<li>Defined in commands/add.ts:13</li>
 								</ul>
 							</aside>
 							<h4 class="tsd-parameters-title">Parameters</h4>
@@ -193,7 +193,7 @@
 						<li class="tsd-description">
 							<aside class="tsd-sources">
 								<ul>
-									<li>Defined in commands/add.ts:9</li>
+									<li>Defined in commands/add.ts:10</li>
 								</ul>
 							</aside>
 							<h4 class="tsd-parameters-title">Parameters</h4>
diff --git a/public/modules/_types_.html b/public/modules/_types_.html
index 15c5cca30c65f8ea170f075d4a32f33da1ea95fc..14875695ed31177002469bd16dfb995ede4402e6 100644
--- a/public/modules/_types_.html
+++ b/public/modules/_types_.html
@@ -148,7 +148,7 @@
 				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
 					<a name="addcommand" class="tsd-anchor"></a>
 					<h3>Add<wbr>Command</h3>
-					<div class="tsd-signature tsd-kind-icon">Add<wbr>Command<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, value<span class="tsd-signature-symbol">?: </span><a href="_types_.html#inputrecord" class="tsd-signature-type">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></div>
+					<div class="tsd-signature tsd-kind-icon">Add<wbr>Command<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, value<span class="tsd-signature-symbol">?: </span><a href="_types_.html#inputrecord" class="tsd-signature-type">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">&gt;</span></div>
 					<aside class="tsd-sources">
 						<ul>
 							<li>Defined in types.ts:20</li>
@@ -159,7 +159,7 @@
 						<ul class="tsd-parameters">
 							<li class="tsd-parameter-signature">
 								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-type-alias">
-									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, value<span class="tsd-signature-symbol">?: </span><a href="_types_.html#inputrecord" class="tsd-signature-type">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></li>
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, value<span class="tsd-signature-symbol">?: </span><a href="_types_.html#inputrecord" class="tsd-signature-type">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">&gt;</span></li>
 								</ul>
 								<ul class="tsd-descriptions">
 									<li class="tsd-description">
@@ -172,7 +172,7 @@
 												<h5><span class="tsd-flag ts-flagOptional">Optional</span> value: <a href="_types_.html#inputrecord" class="tsd-signature-type">InputRecord</a></h5>
 											</li>
 										</ul>
-										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h4>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">&gt;</span></h4>
 									</li>
 								</ul>
 							</li>
diff --git a/src/commands/recipes/resolve.ts b/src/commands/recipes/resolve.ts
index cb96b73d7725688d5d1dfed7a5e383781583de49..0e6d9cc93fdba6f958e8f2162125a84f4dd2c10c 100644
--- a/src/commands/recipes/resolve.ts
+++ b/src/commands/recipes/resolve.ts
@@ -5,25 +5,26 @@ const isReference = (s: string): boolean => s.startsWith("Device.");
 const addDot = (s: string) => (s.endsWith(".") ? s : s + ".");
 
 const resolveReferences = async (
-  msg: GetReturn,
+  message: GetReturn,
   call: CallFn,
   level: number
 ): Promise<GetReturn> => {
-  if (level === 0 || !["string", "object"].includes(typeof msg)) return msg;
-  if (typeof msg === "string") {
-    msg = await call("GET", { paths: splitReference(msg).map(addDot) });
-    await resolveReferences(msg, call, level - 1);
-    return msg;
-  } else if (typeof msg === "object") {
-    for (const [key, val] of Object.entries(msg)) {
+  if (level === 0 || !["string", "object"].includes(typeof message)) return message;
+  if (typeof message === "string") {
+    const msg = await call("GET", { paths: splitReference(message).map(addDot) });
+    return await resolveReferences(msg, call, level - 1);
+  } else if (typeof message === "object") {
+    const msg = Array.isArray(message) ? [...message] : { ...message };
+    for (const [key, val] of Object.entries(message)) {
       if (typeof val === "string" && isReference(val)) {
-        msg[key] = await call("GET", { paths: splitReference(val).map(addDot) });
-        await resolveReferences(msg[key], call, level - 1);
+        const item = await call("GET", { paths: splitReference(val).map(addDot) });
+        msg[key] = await resolveReferences(item, call, level - 1);
       } else if (typeof val === "object")
-        await resolveReferences(msg[key], call, level);
+        msg[key] = await resolveReferences(msg[key], call, level);
     }
+    return msg;
   }
-  return msg;
+  return message;
 };
 
 const make: MakeRecipeFn = (call): ResolveRecipe => (msg, level) => resolveReferences(msg, call, level || 1)