diff --git a/Makefile b/Makefile
index 47221465d7318598d28b1efef546ef21ab9d4773..4967d476d7ef232eaa8d54b399d5223381b2ed1c 100644
--- a/Makefile
+++ b/Makefile
@@ -131,6 +131,11 @@ build_all_providers:
 # packaging templates
 #########################################################################
 
+vendor: gen_providers_json
+
+gen_providers_json:
+	@python3 branding/scripts/gen-providers-json.py branding/config/vendor.conf gui/providers/providers.json
+
 prepare: prepare_templates gen_pkg_win gen_pkg_osx gen_pkg_snap gen_pkg_deb prepare_done
 
 prepare_templates: generate relink_default tgz
diff --git a/branding/README.rst b/branding/README.rst
index 87d80851afdb19ab05698ddc7ccd89edacfebbd9..7f2f16ac54606fb61e1fd43b91f1b3efaf62f9ae 100644
--- a/branding/README.rst
+++ b/branding/README.rst
@@ -29,15 +29,14 @@ before the build. If you want to skip this check, pass `SKIP_CACHECK=yes`
 
 Run::
 
- PROVIDER=example make prepare
+ PROVIDER=example make vendor
 
-You can also specify a custom config file::
+Then you can build the binary::
 
- PROVIDER=example PROVIDER_CONFIG=/path/to/vendor.conf make prepare
+ ./build.sh
 
-Then you need to build the package::
 
- make build
+* The following does not work yet! in progress ------------------
 
 Then you can build all the packages::
 
diff --git a/branding/config/vendor.conf b/branding/config/vendor.conf
index 09921285dec4bf7647e31888bcd0f1e2e389a4f2..3657c2bcf761ac079897e1bea92bba496dc9a986 100644
--- a/branding/config/vendor.conf
+++ b/branding/config/vendor.conf
@@ -1,6 +1,7 @@
 [default]
 
 provider = demolib
+bitmask-providers = [riseup, calyx]
 
 
 [riseup]
@@ -42,7 +43,7 @@ helpURL             = https://calyx.net/support
 geolocationAPI      = https://api.black.riseup.net:9001/json
 
 askForDonations     = false
-donateURL           = http://example.org
+donateURL           = 
 
 [demo]
 
diff --git a/branding/scripts/gen-providers-json.py b/branding/scripts/gen-providers-json.py
new file mode 100644
index 0000000000000000000000000000000000000000..b57965b9712758a239a26108a3344511a23fe8bf
--- /dev/null
+++ b/branding/scripts/gen-providers-json.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python3
+import configparser
+import json
+import os
+import sys
+
+
+from provider import getDefaultProvider
+from provider import getProviderData
+
+OUTFILE = 'providers.json'
+SCRIPT_NAME = 'gen-providers-json'
+
+
+def generateProvidersJSON(configPath, outputJSONPath):
+    print("output:", outputJSONPath)
+    config = configparser.ConfigParser()
+    config.read(configPath)
+
+    # TODO as a first step, we just get the defaultProvider.
+    # For multi-provider, just add more providers to the dict
+
+    providers = {}
+    defaultProvider = getDefaultProvider(config)
+    providers['default'] = defaultProvider
+    providerData = getProviderData(defaultProvider, config)
+    addCaData(providerData, configPath)
+
+    providers[defaultProvider] = providerData
+    with open(outputJSONPath, 'w', encoding='utf-8') as f:
+        json.dump(providers, f, ensure_ascii=False, indent=4)
+
+def addCaData(data, configfile):
+    provider = data.get('name').lower()
+    folder, f = os.path.split(configfile)
+    caFile = os.path.join(folder, provider + '-ca.crt')
+    if not os.path.isfile(caFile):
+        bail('[!] Cannot find CA file in {path}'.format(path=caFile))
+    with open(caFile) as ca:
+        data['caCertString'] = ca.read().strip()
+
+def writeOutput(data, infile, outfile):
+
+    with open(infile) as infile:
+        s = Template(infile.read())
+
+    with open(outfile, 'w') as outf:
+        outf.write(s.substitute(data))
+
+def bail(msg=None):
+    if not msg:
+        print("ERROR: not enough arguments!")
+        print('Usage: {scriptname}.py <config> <output>'.format(
+            scriptname=SCRIPT_NAME))
+    else:
+        print(msg)
+    sys.exit(1)
+
+if __name__ == "__main__":
+    print("[+] Generating providers.json...")
+    if len(sys.argv) != 3:
+        bail()
+    # TODO get BITMASK_BRANDING folder - get config from there, if possible.
+    env_provider_conf = os.environ.get('PROVIDER_CONFIG')
+    if env_provider_conf:
+        if os.path.isfile(env_provider_conf):
+            print("[+] Overriding provider config per "
+                  "PROVIDER_CONFIG variable")
+            configfile = env_provider_conf
+    generateProvidersJSON(sys.argv[1], sys.argv[2])
diff --git a/branding/scripts/vendorize.py b/branding/scripts/vendorize.py
index ba248b0c26723ae4807729d506f9eecc49aa56be..28c5d2a79e2ee61dc4b2b671f726db409fc91164 100755
--- a/branding/scripts/vendorize.py
+++ b/branding/scripts/vendorize.py
@@ -1,5 +1,7 @@
 #!/usr/bin/env python3
 
+# TODO: to be deprecated! use gen-providers-json.py instead
+
 import os
 import sys