diff --git a/ipaacatools/scripts/ipaaca-iu-injector b/ipaacatools/scripts/ipaaca-iu-injector
index ea47a8bfe762d3fe22fd37605f9a6616ba417f87..b2b6757127503ee7e81705dfaf6d00db06a1e18c 100755
--- a/ipaacatools/scripts/ipaaca-iu-injector
+++ b/ipaacatools/scripts/ipaaca-iu-injector
@@ -60,6 +60,11 @@ parser.add_argument(
 	metavar='SECONDS',
 	type=float,
 	help='set time in seconds to wait for potential IU updates (default: 3.0)')
+parser.add_argument(
+	'-j', '--json-payload',
+	dest='json_payload',
+	action='store_true',
+	help='allow structured data to be sent (treats payload VALUE arguments as Python expressions)'))
 parser.add_argument(
 	'-c', '--category',
 	dest='category',
@@ -81,22 +86,27 @@ if __name__ == '__main__':
 	ob = ipaaca.OutputBuffer('IpaacaIUInjector')
 	ob.register_handler(iu_update_handler)
 	iu = ipaaca.Message(arguments.category) if arguments.iu_type == 'Message' else ipaaca.IU(arguments.category)
-	iu.payload = {k: v for (k, v) in itertools.izip_longest(arguments.payload[::2],	arguments.payload[1::2])}
+	if arguments.json_payload:
+		# Treat payload values as Python expressions
+		iu.payload = {k: eval(v) for (k, v) in itertools.izip_longest(arguments.payload[::2],	arguments.payload[1::2])}
+	else:
+		iu.payload = {k: v for (k, v) in itertools.izip_longest(arguments.payload[::2],	arguments.payload[1::2])}
 	ob.add(iu)
+
 	print(
 		'Sent {iu_type} with category "{category}" and payload {{'.format(**vars(arguments)),
 		end='\n' if len(iu.payload) > 0 else '')
 	for k, v in iu.payload.items():
-		print('  "{key}": "{value}",'.format(key=k, value=v))
+		print("  '{key}': {value},".format(key=k, value=v))
 	print('}.')
 	
+	# Wait for updates to the IU
 	try:
 		if arguments.iu_type == 'IU':
 			print('Waiting %s s for the IU to be updated.' % arguments.keep_alive)
 			time.sleep(arguments.keep_alive)
 		else:
 			time.sleep(0.1)
-
 	except KeyboardInterrupt:
 		pass