diff --git a/authorizer/src/asapo_authorizer/server/authorize.go b/authorizer/src/asapo_authorizer/server/authorize.go
index b47b7adcef4b7287bd5312019dea9055be3945ab..26f8c92d19d59846303a666ae63b10089e3e01d0 100644
--- a/authorizer/src/asapo_authorizer/server/authorize.go
+++ b/authorizer/src/asapo_authorizer/server/authorize.go
@@ -25,12 +25,16 @@ type authorizationRequest struct {
 }
 
 func getSourceCredentials(request authorizationRequest) (SourceCredentials, error) {
-	vals := strings.Split(request.SourceCredentials, "%")
 
-	if len(vals) != 5 {
+
+	vals := strings.Split(request.SourceCredentials, "%")
+	nvals:=len(vals)
+	if nvals < 5 {
 		return SourceCredentials{}, errors.New("cannot get source credentials from " + request.SourceCredentials)
 	}
-	creds := SourceCredentials{vals[1], vals[2], vals[3], vals[4],vals[0]}
+
+	creds := SourceCredentials{Type:vals[0], BeamtimeId: vals[1], Beamline: vals[2], Token:vals[nvals-1]}
+	creds.DataSource=strings.Join(vals[3:nvals-1],"%")
 	if creds.DataSource == "" {
 		creds.DataSource = "detector"
 	}
diff --git a/authorizer/src/asapo_authorizer/server/authorize_test.go b/authorizer/src/asapo_authorizer/server/authorize_test.go
index 11c072156664e6d4eb959164c0dd4cf0a92869be..12268d73dd9d476f46e6a2e187ea3a7b6d381a94 100644
--- a/authorizer/src/asapo_authorizer/server/authorize_test.go
+++ b/authorizer/src/asapo_authorizer/server/authorize_test.go
@@ -91,6 +91,8 @@ var credTests = [] struct {
 	{"raw%%beamline%source%token", SourceCredentials{"auto","beamline","source","token","raw"},true,"empty beamtime"},
 	{"raw%asapo_test%%source%token", SourceCredentials{"asapo_test","auto","source","token","raw"},true,"empty bealine"},
 	{"raw%%%source%token", SourceCredentials{},false,"both empty"},
+	{"processed%asapo_test%beamline%source%blabla%token", SourceCredentials{"asapo_test","beamline","source%blabla","token","processed"},true,"% in source"},
+	{"processed%asapo_test%beamline%source%blabla%", SourceCredentials{"asapo_test","beamline","source%blabla","","processed"},true,"% in source, no token"},
 }
 
 func TestSplitCreds(t *testing.T) {
@@ -100,7 +102,7 @@ func TestSplitCreds(t *testing.T) {
 		creds,err := getSourceCredentials(request)
 		if test.ok {
 			assert.Nil(t,err)
-			assert.Equal(t,creds,test.cred,test.message)
+			assert.Equal(t,test.cred,creds,test.message)
 		} else {
 			assert.NotNil(t,err,test.message)
 		}
diff --git a/common/cpp/src/database/mongodb_client.cpp b/common/cpp/src/database/mongodb_client.cpp
index a08ae7da303db69adc886051f773cc5c5bea215c..ee74d5199b5184c552f47cc7e379511474b9191a 100644
--- a/common/cpp/src/database/mongodb_client.cpp
+++ b/common/cpp/src/database/mongodb_client.cpp
@@ -462,9 +462,9 @@ Error StreamInfoFromDbResponse(const std::string &last_record_str,
 
 }
 
-Error MongoDBClient::GetEncodedStreamInfo(const std::string &collection_encoded, StreamInfo* info) const {
+Error MongoDBClient::GetStreamInfo(const std::string &collection, StreamInfo* info) const {
     std::string last_record_str, earliest_record_str;
-    auto err = GetRecordFromDb(collection_encoded, 0, GetRecordMode::kLast, &last_record_str);
+    auto err = GetRecordFromDb(collection, 0, GetRecordMode::kLast, &last_record_str);
     if (err) {
         if (err
             == DBErrorTemplates::kNoRecord) { // with noRecord error it will return last_id = 0 which can be used to understand that the stream is not started yet
@@ -473,7 +473,7 @@ Error MongoDBClient::GetEncodedStreamInfo(const std::string &collection_encoded,
         }
         return err;
     }
-    err = GetRecordFromDb(collection_encoded, 0, GetRecordMode::kEarliest, &earliest_record_str);
+    err = GetRecordFromDb(collection, 0, GetRecordMode::kEarliest, &earliest_record_str);
     if (err) {
         return err;
     }
@@ -481,19 +481,19 @@ Error MongoDBClient::GetEncodedStreamInfo(const std::string &collection_encoded,
     return StreamInfoFromDbResponse(last_record_str, earliest_record_str, info);
 }
 
-Error MongoDBClient::GetStreamInfo(const std::string &collection, StreamInfo* info) const {
-    std::string collection_encoded = EncodeColName(collection);
-    return GetEncodedStreamInfo(collection_encoded,info);
-}
-
 bool MongoCollectionIsDataStream(const std::string &stream_name) {
     std::string prefix = std::string(kDBDataCollectionNamePrefix) + "_";
     return stream_name.rfind(prefix, 0) == 0;
 }
 
-Error MongoDBClient::UpdateCurrentLastStreamInfo(const std::string &collection_name, StreamInfo* info) const {
+
+Error MongoDBClient::UpdateLastStreamInfo(const char* str, StreamInfo* info) const {
+    auto collection_name = DecodeName(str);
+    if (!MongoCollectionIsDataStream(collection_name)) {
+        return nullptr;
+    }
     StreamInfo next_info;
-    auto err = GetEncodedStreamInfo(collection_name, &next_info);
+    auto err = GetStreamInfo(collection_name, &next_info);
     std::string prefix = std::string(kDBDataCollectionNamePrefix) + "_";
     if (err) {
         return err;
@@ -505,17 +505,6 @@ Error MongoDBClient::UpdateCurrentLastStreamInfo(const std::string &collection_n
     return nullptr;
 }
 
-Error MongoDBClient::UpdateLastStreamInfo(const char* str, StreamInfo* info) const {
-    std::string collection_name{str};
-    if (MongoCollectionIsDataStream(collection_name)) {
-        auto err = UpdateCurrentLastStreamInfo(collection_name, info);
-        if (err) {
-            return err;
-        }
-    }
-    return nullptr;
-}
-
 Error MongoDBClient::GetLastStream(StreamInfo* info) const {
     if (!connected_) {
         return DBErrorTemplates::kNotConnected.Generate();
diff --git a/common/cpp/src/database/mongodb_client.h b/common/cpp/src/database/mongodb_client.h
index d1be1bf21dc9064246dc817b4d6ccaaad08b0fc7..a7c7a8d8e735d5a0d95a9a454cb6c558b14ebf4e 100644
--- a/common/cpp/src/database/mongodb_client.h
+++ b/common/cpp/src/database/mongodb_client.h
@@ -74,8 +74,6 @@ class MongoDBClient final : public Database {
     Error AddBsonDocumentToArray(bson_t* query, bson_t* update, bool ignore_duplicates) const;
     Error GetRecordFromDb(const std::string& collection, uint64_t id, GetRecordMode mode, std::string* res) const;
     Error UpdateLastStreamInfo(const char *str, StreamInfo* info) const;
-    Error UpdateCurrentLastStreamInfo(const std::string& collection_name, StreamInfo* info) const;
-    Error GetEncodedStreamInfo(const std::string& collection, StreamInfo* info) const;
     Error DeleteCollection(const std::string& name) const;
     Error DeleteCollections(const std::string &prefix) const;
     Error DeleteDocumentsInCollection(const std::string &collection_name,const std::string &querystr) const;