diff --git a/CHANGELOG.md b/CHANGELOG.md
index 49ee836ed839fd6b252289d8ba68e953449a754c..bbbc7b6bc39bf254cde220402470f92b18dc8a28 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 21.09.0 (in progress)
+
+FEATURES
+* Producer API: C client 
+
+IMPROVEMENTS
+* Allow using ASAPO for commissioning beamtimes
+
 ## 21.06.0
 
 FEATURES
diff --git a/PROTOCOL-VERSIONS.md b/PROTOCOL-VERSIONS.md
index e96812b7a392a8b81bb04305847b7e011b261e4e..e72696805562d6e3d50eb4b6f713be8b7831b33b 100644
--- a/PROTOCOL-VERSIONS.md
+++ b/PROTOCOL-VERSIONS.md
@@ -1,15 +1,15 @@
 ### Producer Protocol
 | Release      | used by client      | Supported by server  | Status           |
 | ------------ | ------------------- | -------------------- | ---------------- |
-| v0.3         | 21.06.0 - 21.06.0   | 21.06.0  - 21.06.0   | Current version  |
-| v0.2         | 21.03.2 - 21.03.2   | 21.03.2  - 21.06.0   | Deprecates from 01.07.2022  |
-| v0.1         | 21.03.0 - 21.03.1   | 21.03.0  - 21.06.0   | Deprecates from 01.06.2022  |
+| v0.3         | 21.06.0 - 21.06.0   | 21.06.0  - 21.09.0   | Current version  |
+| v0.2         | 21.03.2 - 21.03.2   | 21.03.2  - 21.09.0   | Deprecates from 01.07.2022  |
+| v0.1         | 21.03.0 - 21.03.1   | 21.03.0  - 21.09.0   | Deprecates from 01.06.2022  |
 
 
 ### Consumer Protocol
 | Release      | used by client      | Supported by server  | Status           |
 | ------------ | ------------------- | -------------------- | ---------------- |
-| v0.4         | 21.06.0 - 21.06.0   | 21.06.0  - 21.06.0   | Current version  |
-| v0.3         | 21.03.3 - 21.03.3   | 21.03.3  - 21.06.0   | Deprecates from 01.07.2022  |
-| v0.2         | 21.03.2 - 21.03.2   | 21.03.2  - 21.06.0   | Deprecates from 01.06.2022  |
-| v0.1         | 21.03.0 - 21.03.1   | 21.03.0  - 21.06.0   | Deprecates from 01.06.2022  |
+| v0.4         | 21.06.0 - 21.06.0   | 21.06.0  - 21.09.0   | Current version  |
+| v0.3         | 21.03.3 - 21.03.3   | 21.03.3  - 21.09.0   | Deprecates from 01.07.2022  |
+| v0.2         | 21.03.2 - 21.03.2   | 21.03.2  - 21.09.0   | Deprecates from 01.06.2022  |
+| v0.1         | 21.03.0 - 21.03.1   | 21.03.0  - 21.09.0   | Deprecates from 01.06.2022  |
diff --git a/VERSIONS.md b/VERSIONS.md
index 3196aab3c56a46b9bbca1616925caba94e5e9d23..a52e3d2571f0d5faf4a6646ff2693fc75bfcbf2f 100644
--- a/VERSIONS.md
+++ b/VERSIONS.md
@@ -2,21 +2,23 @@
 
 | Release      | API changed\*\* |  Protocol | Supported by server from/to | Status              |Comment|
 | ------------ | ----------- | -------- | ------------------------- | --------------------- | ------- |
-| 21.06.0      | Yes         |  v0.3     | 21.06.0/21.06.0           | current version        |arbitrary characters|
-| 21.03.3      | No          |  v0.2     | 21.03.2/21.03.3           | deprecates 01.07.2022        |bugfix in server|
-| 21.03.2      | Yes         |  v0.2     | 21.03.2/21.03.3           | deprecates 01.07.2022        |bugfixes, add delete_stream|
-| 21.03.1      | No          |  v0.1     | 21.03.0/21.03.3           | deprecates 01.06.2022   |bugfix in server|
-| 21.03.0      | Yes         |  v0.1     | 21.03.0/21.03.3           |                 |          |
+| 21.09.0      | No          |  v0.3     | 21.06.0/21.09.0           | current version              ||
+| 21.06.0      | Yes         |  v0.3     | 21.06.0/21.09.0           |                              |arbitrary characters|
+| 21.03.3      | No          |  v0.2     | 21.03.2/21.09.0           | deprecates 01.07.2022        |bugfix in server|
+| 21.03.2      | Yes         |  v0.2     | 21.03.2/21.09.0           | deprecates 01.07.2022        |bugfixes, add delete_stream|
+| 21.03.1      | No          |  v0.1     | 21.03.0/21.09.0           | deprecates 01.06.2022   |bugfix in server|
+| 21.03.0      | Yes         |  v0.1     | 21.03.0/21.09.0           |                 |          |
 
 ### Consumer API
 
 | Release      | API changed\*\* |  Protocol | Supported by server from/to | Status         |Comment|
 | ------------ | ----------- | --------- | ------------------------- | ---------------- | ------- |
-| 21.06.0      | Yes         |  v0.4     | 21.06.0/21.06.0           | current version  |arbitrary characters, bugfixes |
-| 21.03.3      | Yes         |  v0.3     | 21.03.3/21.06.0           | deprecates 01.06.2022  |bugfix in server, error type for dublicated ack|
-| 21.03.2      | Yes         |  v0.2     | 21.03.2/21.06.0           | deprecates 01.06.2022  |bugfixes, add delete_stream|
-| 21.03.1      | No          |  v0.1     | 21.03.0/21.06.0           | deprecates 01.06.2022       |bugfix in server|
-| 21.03.0      | Yes         |  v0.1     | 21.03.0/21.06.0           |                  |        |
+| 21.09.0      | No         |  v0.4      | 21.06.0/21.09.0           | current version  | |
+| 21.06.0      | Yes         |  v0.4     | 21.06.0/21.09.0           |   |arbitrary characters, bugfixes |
+| 21.03.3      | Yes         |  v0.3     | 21.03.3/21.09.0           | deprecates 01.06.2022  |bugfix in server, error type for dublicated ack|
+| 21.03.2      | Yes         |  v0.2     | 21.03.2/21.09.0           | deprecates 01.06.2022  |bugfixes, add delete_stream|
+| 21.03.1      | No          |  v0.1     | 21.03.0/21.09.0           | deprecates 01.06.2022       |bugfix in server|
+| 21.03.0      | Yes         |  v0.1     | 21.03.0/21.09.0           |                  |        |
 
 \* insignificant changes/bugfixes (e.g. in return type, etc), normally do not require client code changes, but formally might break the client
 
diff --git a/authorizer/src/asapo_authorizer/server/authorize.go b/authorizer/src/asapo_authorizer/server/authorize.go
index 26f8c92d19d59846303a666ae63b10089e3e01d0..bac5853d8ad5a547c93e7c359fa71319112ed8e5 100644
--- a/authorizer/src/asapo_authorizer/server/authorize.go
+++ b/authorizer/src/asapo_authorizer/server/authorize.go
@@ -69,6 +69,19 @@ func beamtimeMetaFromJson(fname string) (beamtimeMeta, error) {
 	return meta, nil
 }
 
+func commissioningMetaFromJson(fname string) (beamtimeMeta, error) {
+	var meta beamtimeMeta
+	var comMeta commissioningMeta
+	err := utils.ReadJsonFromFile(fname, &comMeta)
+	if err != nil {
+		return beamtimeMeta{}, err
+	}
+	meta.BeamtimeId = comMeta.Id
+	meta.Beamline = strings.ToLower(comMeta.Beamline)
+	meta.OfflinePath = comMeta.OfflinePath
+	return meta, nil
+}
+
 func beamtimeMetaFromMatch(match string) (beamtimeMeta, error) {
 	match = strings.TrimPrefix(match, settings.RootBeamtimesFolder)
 	match = strings.TrimPrefix(match, string(filepath.Separator))
@@ -109,23 +122,43 @@ func findBeamtimeInfoFromId(beamtime_id string) (beamtimeMeta, error) {
 	return beamtimeMeta{}, errors.New("Cannot find beamline for "+beamtime_id)
 }
 
-func findBeamtimeMetaFromBeamline(beamline string) (beamtimeMeta, error) {
+func findMetaFileInFolder(beamline string,iscommissioning bool) (string, string, error){
 	sep := string(filepath.Separator)
-	pattern := "beamtime-metadata-*.json"
-	online_path := settings.CurrentBeamlinesFolder + sep + beamline + sep + "current"
-
+	var pattern,folder string
+	if !iscommissioning {
+		pattern = "beamtime-metadata-*.json"
+		folder = "current"
+	} else {
+		pattern = "commissioning-metadata-*.json"
+		folder = "commissioning"
+	}
+	online_path := settings.CurrentBeamlinesFolder + sep + beamline + sep + folder
 	matches, err := filepath.Glob(online_path + sep + pattern)
 	if err != nil {
-		return beamtimeMeta{}, err
+		return "","", err
 	}
 	if len(matches) != 1 {
-		return beamtimeMeta{}, errors.New("more than one beamtime-metadata file in folder")
+		return "","", errors.New("should be one beamtime-metadata file in folder")
 	}
+	return matches[0],online_path, nil
 
-	meta, err := beamtimeMetaFromJson(matches[0])
+}
+
+func findBeamtimeMetaFromBeamline(beamline string,iscommissioning bool) (meta beamtimeMeta, err error) {
+	fName,online_path, err := findMetaFileInFolder(beamline,iscommissioning)
 	if (err != nil) {
 		return beamtimeMeta{}, err
 	}
+
+	if iscommissioning {
+		meta, err = commissioningMetaFromJson(fName)
+	} else {
+		meta, err = beamtimeMetaFromJson(fName)
+	}
+	if (err != nil) {
+		return beamtimeMeta{}, err
+	}
+
 	if meta.BeamtimeId == "" || meta.OfflinePath=="" || meta.Beamline == ""{
 		return beamtimeMeta{}, errors.New("cannot set meta fields from beamtime file")
 	}
@@ -193,19 +226,23 @@ func authorizeByToken(creds SourceCredentials) (accessTypes []string, err error)
 	return checkToken(creds.Token,subject_expect)
 }
 
+func iscommissioning(beamtime string) bool {
+	return len(beamtime)>0 && beamtime[0]=='c'
+}
+
 func findMeta(creds SourceCredentials) (beamtimeMeta, error) {
 	var err error
 	var meta beamtimeMeta
 	if (creds.BeamtimeId != "auto") {
 		meta, err = findBeamtimeInfoFromId(creds.BeamtimeId)
 		if (err == nil ) {
-			meta_onilne, err_online := findBeamtimeMetaFromBeamline(meta.Beamline)
+			meta_onilne, err_online := findBeamtimeMetaFromBeamline(meta.Beamline,iscommissioning(creds.BeamtimeId))
 			if err_online == nil && meta.BeamtimeId == meta_onilne.BeamtimeId {
 				meta.OnlinePath = meta_onilne.OnlinePath
 			}
 		}
 	} else {
-		meta, err = findBeamtimeMetaFromBeamline(creds.Beamline)
+		meta, err = findBeamtimeMetaFromBeamline(creds.Beamline,false)
 	}
 
 	if creds.Type == "processed" {
diff --git a/authorizer/src/asapo_authorizer/server/authorize_test.go b/authorizer/src/asapo_authorizer/server/authorize_test.go
index 12268d73dd9d476f46e6a2e187ea3a7b6d381a94..f4e97e788fda426fc463b3019d69d1b857f75925 100644
--- a/authorizer/src/asapo_authorizer/server/authorize_test.go
+++ b/authorizer/src/asapo_authorizer/server/authorize_test.go
@@ -172,6 +172,17 @@ var beamtime_meta =`
 }
 `
 
+var commissioning_meta =`
+{
+    "beamline": "P04",
+    "corePath": "/asap3/petra3/gpfs/p04/2021/commissioning/c20210823_000_MAA",
+    "generated": "2021-08-23 09:39:09",
+    "id": "c20210823_000_MAA",
+    "tag": "MAA"
+}
+`
+
+
 var authTests = [] struct {
 	source_type string
 	beamtime_id string
@@ -221,6 +232,10 @@ var authTests = [] struct {
 		`{"beamtimeId":"test","beamline":"bl1","dataSource":"dataSource","corePath":"./tf/gpfs/bl1/2019/data/test","beamline-path":"","source-type":"processed","access-types":["read","write"]}`},
 	{"processed","test","auto","dataSource", "","127.0.0.2",http.StatusUnauthorized,"processed without token, wrong host",
 		""},
+	{"raw","c20210823_000_MAA","auto","dataSource", "","127.0.0.1",http.StatusOK,"raw type commissioning",
+		`{"beamtimeId":"c20210823_000_MAA","beamline":"p04","dataSource":"dataSource","corePath":"./tf/gpfs/p04/2019/commissioning/c20210823_000_MAA","beamline-path":"./p04/commissioning","source-type":"raw","access-types":["read","write"]}`},
+	{"processed","c20210823_000_MAA","auto","dataSource", "","127.0.0.1",http.StatusOK,"processed type commissioning",
+		`{"beamtimeId":"c20210823_000_MAA","beamline":"p04","dataSource":"dataSource","corePath":"./tf/gpfs/p04/2019/commissioning/c20210823_000_MAA","beamline-path":"","source-type":"processed","access-types":["read","write"]}`},
 }
 
 func TestAuthorize(t *testing.T) {
@@ -238,11 +253,17 @@ func TestAuthorize(t *testing.T) {
 
 	os.MkdirAll(filepath.Clean("tf/gpfs/bl1/2019/data/test"), os.ModePerm)
 	os.MkdirAll(filepath.Clean("tf/gpfs/bl1/2019/data/test_online"), os.ModePerm)
+	os.MkdirAll(filepath.Clean("tf/gpfs/p04/2019/commissioning/c20210823_000_MAA"), os.ModePerm)
+
 	os.MkdirAll(filepath.Clean("p07/current"), os.ModePerm)
+	os.MkdirAll(filepath.Clean("p04/commissioning"), os.ModePerm)
 	os.MkdirAll(filepath.Clean("bl1/current"), os.ModePerm)
 	ioutil.WriteFile(filepath.Clean("p07/current/beamtime-metadata-11111111.json"), []byte(beamtime_meta), 0644)
 	ioutil.WriteFile(filepath.Clean("bl1/current/beamtime-metadata-test_online.json"), []byte(beamtime_meta_online), 0644)
+	ioutil.WriteFile(filepath.Clean("p04/commissioning/commissioning-metadata-c20210823_000_MAA.json"), []byte(commissioning_meta), 0644)
+
 	defer 	os.RemoveAll("p07")
+	defer 	os.RemoveAll("p04")
 	defer 	os.RemoveAll("tf")
 	defer 	os.RemoveAll("bl1")
 
@@ -251,6 +272,9 @@ func TestAuthorize(t *testing.T) {
 			if test.beamline == "auto" {
 				bl = "bl1"
 			}
+			if iscommissioning(test.beamtime_id)  && test.beamline == "auto" {
+				bl = "p04"
+			}
 			expected_filter:="a3"+bl+"-hosts"
 			if test.dataSource == "noldap" {
 				err := &common.ServerError{utils.StatusServiceUnavailable,""}
@@ -327,7 +351,7 @@ var extractBtinfoTests = [] struct {
 	{".",filepath.Clean("tf/gpfs/BeamtimeUsers/2019/data/123"), "bl1.01","123",false},
 	{".",filepath.Clean("tf/gpfs/state/2019/data/123"), "bl1.01","123",false},
 	{".",filepath.Clean("tf/gpfs/support/2019/data/123"), "bl1.01","123",false},
-	{".",filepath.Clean("petra3/gpfs/p01/2019/comissioning/c20180508-000-COM20181"), "p01","c20180508-000-COM20181",true},
+	{".",filepath.Clean("petra3/gpfs/p01/2019/commissioning/c20180508-000-COM20181"), "p01","c20180508-000-COM20181",true},
 
 }
 func TestGetBeamtimeInfo(t *testing.T) {
diff --git a/authorizer/src/asapo_authorizer/server/server.go b/authorizer/src/asapo_authorizer/server/server.go
index f55f72f2a388a45784ad0ddf054a805fecd9e325..59d43987d7aafface0687500409b7efdcf0ee2be 100644
--- a/authorizer/src/asapo_authorizer/server/server.go
+++ b/authorizer/src/asapo_authorizer/server/server.go
@@ -15,6 +15,13 @@ type  beamtimeMeta struct {
 	AccessTypes []string `json:"access-types"`
 }
 
+type  commissioningMeta struct {
+	Id string  `json:"id"`
+	Beamline string     `json:"beamline"`
+	OfflinePath string `json:"corePath"`
+}
+
+
 type serverSettings struct {
 	Port                   int
 	LogLevel               string