diff --git a/image_creator/dialog_menu.py b/image_creator/dialog_menu.py
index 858dc19a0e88728f2f67c3664bde921711a2bdbb..bb4bb1ab65c6a8b84324d4b934a1b463a8049971 100644
--- a/image_creator/dialog_menu.py
+++ b/image_creator/dialog_menu.py
@@ -40,6 +40,7 @@ snf-image-creator.
 import os
 import textwrap
 import StringIO
+import json
 
 from image_creator import __version__ as version
 from image_creator.util import MD5, FatalError
@@ -249,12 +250,12 @@ def register_image(session):
             try:
                 out.output("Registering %s image with Cyclades..." % img_type)
                 kamaki = Kamaki(session['account'], out)
-                kamaki.register(name, session['pithos_uri'], metadata,
-                                is_public)
+                result = kamaki.register(name, session['pithos_uri'], metadata,
+                                         is_public)
                 out.success('done')
                 # Upload metadata file
                 out.output("Uploading metadata file...")
-                metastring = extract_metadata_string(session)
+                metastring = unicode(json.dumps(result, ensure_ascii=False))
                 kamaki.upload(StringIO.StringIO(metastring),
                               size=len(metastring),
                               remote_path="%s.meta" % session['upload'])
diff --git a/image_creator/dialog_util.py b/image_creator/dialog_util.py
index fee232a21d3a7407b8781f4bcfbf74f1ad386f57..fdd0d519d56b772ef522f73b0bc6e1ac20b020d2 100644
--- a/image_creator/dialog_util.py
+++ b/image_creator/dialog_util.py
@@ -39,6 +39,7 @@ snf-image-creator.
 
 import os
 import re
+import json
 from image_creator.output.dialog import GaugeOutput
 from image_creator.util import MD5
 from image_creator.kamaki_wrapper import Kamaki
@@ -84,12 +85,14 @@ class Reset(Exception):
 
 def extract_metadata_string(session):
     """Convert image metadata to text"""
-    metadata = ['%s=%s' % (k, v) for (k, v) in session['metadata'].items()]
-
+    metadata = {}
+    metadata.update(session['metadata'])
     if 'task_metadata' in session:
-        metadata.extend("%s=yes" % m for m in session['task_metadata'])
+        for key in session['task_metadata']:
+            metadata[key] = 'yes'
 
-    return '\n'.join(metadata) + '\n'
+    return unicode(json.dumps({'properties': metadata,
+                               'disk-format': 'diskdump'}, ensure_ascii=False))
 
 
 def extract_image(session):
diff --git a/image_creator/dialog_wizard.py b/image_creator/dialog_wizard.py
index f761d990a43d3816cb52d6a8bf0ea8edf579a539..fb92f29928df5bb2b4c5b96576c7614b77e23a61 100644
--- a/image_creator/dialog_wizard.py
+++ b/image_creator/dialog_wizard.py
@@ -39,6 +39,7 @@ snf-image-creator.
 
 import time
 import StringIO
+import json
 
 from image_creator.kamaki_wrapper import Kamaki, ClientError
 from image_creator.util import MD5, FatalError
@@ -292,11 +293,6 @@ def create_image(session, account):
         md5 = MD5(out)
         session['checksum'] = md5.compute(image.device, size)
 
-        #Metadata
-        metastring = '\n'.join(
-            ['%s=%s' % (key, value) for (key, value) in metadata.items()])
-        metastring += '\n'
-
         out.output()
         try:
             out.output("Uploading image to pithos:")
@@ -307,14 +303,10 @@ def create_image(session, account):
             pithos_file = ""
             with open(image.device, 'rb') as f:
                 pithos_file = kamaki.upload(f, size, name,
-                                            "(1/4)  Calculating block hashes",
-                                            "(2/4)  Uploading missing blocks")
+                                            "(1/3)  Calculating block hashes",
+                                            "(2/3)  Uploading missing blocks")
 
-            out.output("(3/4)  Uploading metadata file ...", False)
-            kamaki.upload(StringIO.StringIO(metastring), size=len(metastring),
-                          remote_path="%s.%s" % (name, 'meta'))
-            out.success('done')
-            out.output("(4/4)  Uploading md5sum file ...", False)
+            out.output("(3/3)  Uploading md5sum file ...", False)
             md5sumstr = '%s %s\n' % (session['checksum'], name)
             kamaki.upload(StringIO.StringIO(md5sumstr), size=len(md5sumstr),
                           remote_path="%s.%s" % (name, 'md5sum'))
@@ -325,9 +317,15 @@ def create_image(session, account):
                 False
             out.output('Registering %s image with cyclades ...' %
                        wizard['ImageRegistration'].lower(), False)
-            kamaki.register(wizard['ImageName'], pithos_file, metadata,
-                            is_public)
+            result = kamaki.register(wizard['ImageName'], pithos_file,
+                                     metadata, is_public)
             out.success('done')
+            out.output("Uploading metadata file ...", False)
+            metastring = unicode(json.dumps(result, ensure_ascii=False))
+            kamaki.upload(StringIO.StringIO(metastring), size=len(metastring),
+                          remote_path="%s.%s" % (name, 'meta'))
+            out.success('done')
+
             if is_public:
                 out.output("Sharing md5sum file ...", False)
                 kamaki.share("%s.md5sum" % name)
diff --git a/image_creator/main.py b/image_creator/main.py
index dbcb12767ddc7fdecbf74c60d382207144df15b1..4db1e19ecb1477481af6f351e24d543d1c55c14e 100644
--- a/image_creator/main.py
+++ b/image_creator/main.py
@@ -49,6 +49,7 @@ import os
 import optparse
 import StringIO
 import signal
+import json
 
 
 def check_writable_dir(option, opt_str, value, parser):
@@ -280,9 +281,9 @@ def image_creator():
         md5 = MD5(out)
         checksum = md5.compute(image.device, size)
 
-        metastring = '\n'.join(
-            ['%s=%s' % (key, value) for (key, value) in metadata.items()])
-        metastring += '\n'
+        metastring = unicode(json.dumps(
+            {'properties': metadata,
+             'disk-format': 'diskdump'}, ensure_ascii=False))
 
         if options.outfile is not None:
             image.dump(options.outfile)
@@ -324,10 +325,11 @@ def image_creator():
                 img_type = 'public' if options.public else 'private'
                 out.output('Registering %s image with ~okeanos ...' % img_type,
                            False)
-                kamaki.register(options.register, uploaded_obj, metadata,
-                                options.public)
+                result = kamaki.register(options.register, uploaded_obj,
+                                         metadata, options.public)
                 out.success('done')
                 out.output("Uploading metadata file ...", False)
+                metastring = unicode(json.dumps(result, ensure_ascii=False))
                 kamaki.upload(StringIO.StringIO(metastring),
                               size=len(metastring),
                               remote_path="%s.%s" % (options.upload, 'meta'))