diff --git a/psConfig/tasks/gpsr/gpsr.conf b/psConfig/tasks/gpsr/gpsr.conf
index 57c62b09ac98d2579956da2d62d18743873febf4..2492f2b97c3ebb031dad905a6d466b9f661909fd 100644
--- a/psConfig/tasks/gpsr/gpsr.conf
+++ b/psConfig/tasks/gpsr/gpsr.conf
@@ -9,7 +9,7 @@ alsadevice=sysdefault;
 [pocketsphinxinstance]
 name=Commands;
 dict=../../../psGrammar/dictionary/tobiDic.dic;
-jsgf=../../../psGrammar/tasks/gpsr/gpsr2.jsgf;
+jsgf=../../../psGrammar/tasks/gpsr/gpsr23alternate.jsgf;
 rsbscope=/speechrec/psa/commands;
 bestpath=no;
 autoload=yes;
diff --git a/psGrammar/tasks/gpsr/gpsr23.jsgf b/psGrammar/tasks/gpsr/gpsr23.jsgf
new file mode 100644
index 0000000000000000000000000000000000000000..67088fd1de64eb05332da2268a151e5848d3c534
--- /dev/null
+++ b/psGrammar/tasks/gpsr/gpsr23.jsgf
@@ -0,0 +1,169 @@
+#JSGF V1.0;
+# This grammar tries to restrict task combinations by checking available and required references to places, items and persons. It doesn't work yet and is not worth continuing right now.
+grammar speechRecognition;
+
+public <sentence> 		= [could you | robot | tobi] [please] (<singleCommand> | <commandChain>)
+= ([could you | robot | tobi] [please] <VP1> [([and|then] <VP2>)] [([and|then] <VP3>)]);
+
+<singleCommand>	= <standalone>;
+
+# There needs to be a better way to check what combinations are possible
+# meetName and findPrsInRoom generate both
+ person and location references, but the commands that my follow are unique for each case
+<commandChain> 	= (<genLoc> [and|then] <reqLocGenPrs> [and|then] <reqPrs>)
+			| (<genLoc> [and|then] <reqLocGenPrs> [and|then] <noReq>)
+			| (<genLoc> [and|then] <reqLocGenItem> [and|then] <reqItem>)
+			| (<meetPrsAtBeac> [and|then] <reqPrsMOVE> [and|then] <reqPrsMOVE>)
+			| (<meetPrsAtBeac> [and|then] <reqPrs> [[and|then] <noReq>)
+			| (<genLocPrs> [and|then] <reqPrs> [[and|then] <noReq>])
+
+
+<noReq> = (<genLoc> | <genPrs> | <genItem>);
+
+<genLoc>	= <goToLoc>;
+
+<genPrs>	=
+
+<genItem>	= (<takeObjFromPlcmt> | <takeObj>);
+
+<genLocPrs>	= (<meetPrsAtBeac> | <findPrsInRoom>);
+
+<reqLocGenPrs> = (<findPrs> | <meetName>);
+
+<reqLocGenItem>= <findObj>;
+
+<reqPrsMOVE>	= (<followPrsToRoom> | <followPrs> | <guidePrsToBeacon>);
+<reqPrsTALK>	= (<answerQuestion> | <talkInfo>;
+<reqLocPrs>	= <guidePrsBack>;
+
+<reqItem>	= (<deliverObjPronToMe> | <placeObjPronOnPlcmt> | <placeObjOnPlcmt> | <deliverObjToNameAtBeac>)
+
+<standalone>	= <deliverObjToMe> | <deliverObjToGestPrsInRoom> | <countObjOnPlcmt> | <countPrsInRoom> | <tellPrsInfoInLoc> | <tellObjPropOnPlcmt> |  | <followNameFromBeacToRoom> | <guideNameFromBeacToBeac> | <guideNameToBeacFindAtBeac> | <bringMeObj> | <bringMeObjFromPlcmt> | <tellCatPropOnPlcmt> | <findObjInRoom> | <talkInfoToGestPrsInRoom> | <answerToGestPrsInRoom>);
+
+
+
+<goToLoc> 			= <V_go> <toLocPrep> (<NP_room> | <NP_placement> | <NP_beacon>);
+
+<findObj> 			= <V_find> <NP_object>;
+<findObjInRoom> 		= <V_find> (<NP_object> | <NP_category>) <inLocPrep> <NP_room>;
+
+<takeObj> 			= <V_take> <NP_object>;
+<takeObjFromPlcmt> 		= <V_take>  <NP_object> <fromLocPrep> (<NP_room> | <NP_placement>);
+
+<findPrs> 			= <V_find> (<NP_gestperson> | <NP_genderperson> | <NP_poseperson>);
+<findPrsInRoom> 		= <V_find> (<NP_gestperson> | <NP_genderperson> | <NP_poseperson>) <inLocPrep> <NP_room>;
+
+<placeObjOnPlcmt> 		= <V_place> <NP_object> <placePrep>  <NP_placement>;
+<placeObjPronOnPlcmt> 		= <V_place> <NP_objectpron> <placePrep>  <NP_placement>;
+
+<talkInfo> 			= <V_talk> <NP_talk>;
+<talkInfoToGestPrsInRoom> 	= <V_talk> <NP_talk> <talkPrep> <NP_gestperson> <inLocPrep> <NP_room>;
+
+<answerQuestion> 		= <V_answer> <NP_answer>;
+<answerToGestPrsInRoom> 	= <V_answer> <NP_answer> <talkPrep> <NP_gestperson> <inLocPrep> <NP_room>;
+
+<followPrs> 			= <V_follow> <NP_personalpron>;
+<followPrsToRoom> 		= <V_follow> <NP_personalpron> <toLocPrep> <NP_roomTwo>;
+<followNameFromBeacToRoom> 	= <V_follow> <NP_name> <fromLocPrep> <NP_beacon> <toLocPrep> <NP_roomTwo>;
+
+<meetName> 			= <V_meet> <NP_name>;
+<meetPrsAtBeac> 		= <V_meet> <NP_name> <atLocPrep> <NP_beacon>;
+
+<bringMeObj>    		= <V_bring> <NP_me> <NP_object>;
+<bringMeObjFromPlcmt> 		= <V_bring> <NP_me> <NP_object> <fromLocPrep> <NP_placement>;
+
+<countObjOnPlcmt> 		= <V_count> (<NP_object> | <NP_category>) there are <placePrep> <NP_placement>;
+<countPrsInRoom> 		= <V_count> people in <NP_room> <arePrep> (<NP_posture> | <NP_genderpersonplural>);
+
+<tellPrsInfoInLoc> 		= <V_tell> me <NP_personattribute> of the person <LocPrep> (<NP_room> | <NP_beacon>);
+<tellObjPropOnPlcmt> 		= <V_tell> me ((what is) | whats) <NP_objectprop> object <onLocPrep> <NP_placement>;
+<tellCatPropOnPlcmt> 		= <V_tell> me ((what is) | whats) <NP_objectprop> <NP_category> <onLocPrep> <NP_placement>;
+
+<deliverObjToMe> 		= <V_deliver> <NP_object> <deliverPrep> <NP_me>;
+<deliverObjPronToMe> 		= <V_deliver> <NP_objectpron> <deliverPrep> <NP_me>;
+<deliverObjToGestPrsInRoom> 	= <V_deliver> [<NP_objectpron>] <NP_object> <deliverPrep> <NP_gestperson> <inLocPrep> <NP_roomTwo>;
+<deliverObjToNameAtBeac> 	= <V_deliver> <NP_objectpron> <deliverPrep> <NP_name> <atLocPrep> <NP_beaconTwo>;
+
+<guidePrsBack>			= <V_guide> <NP_personalpron> back;
+<guidePrsToBeacon> 		= <V_guide> <NP_personalpron> <toLocPrep> <NP_beaconTwo>;
+<guideNameFromBeacToBeac> 	= <V_guide> <NP_name> <fromLocPrep> <NP_beacon> <toLocPrep> <NP_beaconTwo>;
+<guideNameToBeacFindAtBeac> 	= <V_guide> <NP_name> <toLocPrep> <NP_beaconTwo> you (may | can | will) find (them | him | her) <atLocPrep> <NP_beacon>;
+
+
+<deliverPrep> 			= to;
+<placePrep> 			= on;
+<inLocPrep> 			= in;
+<fromLocPrep> 			= from;
+<toLocPrep> 			= to;
+<atLocPrep> 			= at;
+<talkPrep> 			= to;
+<LocPrep> 			= in | at;
+<onLocPrep> 			= on;
+<arePrep> 			= are;
+
+<V_take>    			= bring | take | get | grasp | (pick up);
+<V_place>   			= put | place;
+<V_deliver> 			= bring | give | deliver;
+<V_bring> 			= bring | give;
+<V_go> 			= go | navigate;
+<V_find> 			= find | locate | (look for);
+<V_talk> 			= tell | say;
+<V_answer> 			= answer;
+<V_follow> 			= follow;
+<V_meet> 			= meet | face | contact;
+<V_guide> 			= guide | escort | take | lead | accompany;
+<V_tell> 			= tell;
+<V_count> 			= tell me how many;
+
+<NP_object>    			= (the <N_object>) | (a <N_object>) | (an <N_object>) | (<N_object>);
+<NP_objectpron> 		= (<N_objectpron>);
+<NP_category> 			= (the <N_category>) | <N_category>;
+<NP_objectprop> 		= (the <N_objectprop>);
+<NP_placement> 			= (the <N_placement>);
+<NP_placementTwo> 		= (the <N_placementTwo>);
+<NP_beacon> 			= (the <N_beacon>);
+<NP_beaconTwo> 			= (the <N_beaconTwo>);
+<NP_room> 			= (the <N_room>);
+<NP_roomTwo> 			= (the <N_roomTwo>);
+<NP_me>        			= (<N_me>);
+<NP_gestperson> 		= (the <N_gestperson>) | (a <N_gestperson>);
+<NP_poseperson> 		= (a <N_poseperson>);
+<NP_genderperson> 		= (a <N_genderperson>);
+<NP_genderpersonplural> 	= (<N_genderpersonplural>);
+<NP_name> 			= <N_name>;
+<NP_talk> 			= <N_talk>;
+<NP_answer> 			= <N_answer>;
+<NP_personalpron> 		= <N_personalpron>;
+<NP_personattribute> 		= (the <N_personattribute>);
+<NP_posture> 			= <N_posture>;
+
+<N_objectpron> 			= it;
+<N_objectprop> 			= biggest | largest | smallest | heaviest | lightest | thinnest;
+<N_me>        			= me;
+<N_gestperson> 			= (person waving) | (person (raising | rising) [their] (left|right) arm) | (person pointing to the (left|right)) | (person calling);
+<N_poseperson> 			= (person sitting) | (person standing) | (person lying down);
+<N_genderperson> 		= man | woman | boy | girl | (male person) | (female person);
+<N_genderpersonplural> 		= men | women | boys | girls | male | female;
+<N_talk> 			= (something about yourself) | (the time) | (what day is (today | tomorrow)) | (your teams (name | country | affiliation)) | (the day of the (week | month)) | (a joke);
+<N_answer> 			= (a question);
+<N_personalpron> 		= them | her | him;
+<N_personattribute> 		= name | gender | pose;
+<N_posture> 			= sitting | standing | lying down;
+
+<N_object_old>    			= basket | cereals | cloth | (coconut milk) | coke | cornflakes | noodles | orange (juice | drink) | peas | plate | pringles | red bowl | salt | soap | sponge | (tomato paste) | water;
+<N_object>              = (chocolate milk) | milk | cola | (soap box) | (choco krispies) | bowl | plate | fork | knife | spoon | cup | lemon | banana | peach | pear;
+<N_category_old> 			= care | drink | (cleaning stuff) | container | food | snack | cutlery;
+<N_category>          = fruits | cutlery | drinks | snacks | (pantry items);
+<N_room_old> 			= corridor | (living room) | kitchen | (bath room);
+<N_room>          = kitchen | (living room) | hallway | bathroom | office;
+<N_roomTwo> 			= corridor | (living room) | kitchen | (bath room);
+<N_placement_old> 			= (living table) | (kitchen counter) | sink | stove | cabinet | bar;
+<N_placementTwo_old> 		= (living table) | (kitchen counter) | sink | stove | cabinet | bar;
+<N_placement>     = (kitchen table) | desk | (side board) | (side table) | sink | (kitchen counter) | cabinet | workstation;
+<N_placementTwo>  = (kitchen table) | desk | (side board) | (side table) | sink | (kitchen counter) | cabinet | workstation;
+<N_beacon_old> 			= (living table) | sink | bar | sofa | fridge | (comfy chair);
+<N_beaconTwo_old> 			= (living table) | sink | bar | sofa | fridge | (comfy chair);
+<N_beacon>        = fridge | sink | dishwasher | (easy chair) | (arm chair) | (kitchen table) | workstation;
+<N_beaconTwo>     = fridge | sink | dishwasher | (easy chair) | (arm chair) | (kitchen table) | workstation;
+<N_name_old> 			= emma | olivia | sophia | ava | isabella | mia | abigail | emily | charlotte | harper | noah | liam | mason | jacob | william | ethan | james | alexander | michael | benjamin;
+<N_name>          = amelia | angel | ava | charlie | charlotte | hunter | max | mia | olivia | parker | sam | jack | noah | oliver | thomas | william;
diff --git a/psGrammar/tasks/gpsr/gpsr23alternate.jsgf b/psGrammar/tasks/gpsr/gpsr23alternate.jsgf
new file mode 100644
index 0000000000000000000000000000000000000000..f9cd00c4558344107d333ca7a060b09b0ac9a71c
--- /dev/null
+++ b/psGrammar/tasks/gpsr/gpsr23alternate.jsgf
@@ -0,0 +1,163 @@
+#JSGF V1.0;
+# This grammar tries to restrict task combinations by checking available and required references to places, items and persons. It doesn't work yet and is not worth continuing right now.
+grammar speechRecognition;
+
+public <sentence> 		= [could you | robot | tobi] [please] <command>;
+
+command = (<cmdfndppl> | <cmdfndobj> | <cmdguide> | <cmdfollow> | <cmdfollowout> | <cmdincomplete> | <cmdman> | <complexman> | <cmdpartyhost>);
+
+
+#Base commands
+<cmdfndppl> 		= <tellPrsInfoInLoc> | <countPrsInRoom>;
+
+<cmdfndobj> 		= <findObjInRoom> | <countObjOnPlcmt> | <tellCatPropOnPlcmt> | <tellObjPropOnPlcmt>;
+
+<cmdguide> 			= <guideNameFromBeacToBeac> 
+					| (<meetPrsAtBeac> and <guidePrsToBeacon>)
+					| (<goToLoc> <meetName> and <guidePrsToBeacon>);
+
+
+<cmdfollow> 		= <followNameFromBeacToRoom>
+					| (<meetPrsAtBeac> and (<followPrs> | <followPrsToRoom>))
+					| (<goToLoc> <meetName> and (<followPrs> | <followPrsToRoom>));
+
+<cmdfollowout> 		= <meetPrsAtBeac> <followPrs> and (<goToLoc> | <guidePrsBack>);
+
+<cmdincomplete> 	= noGrammarMatch;
+
+<cmdman> 			= <bringMeObjFromPlcmt> 
+					| (<takefrom> and (<deliverObjPronToMe> | <deliverObjToNameAtBeac>))
+					| (<takefrom> and <placeObjPronOnPlcmt>);
+
+<complexman> 		= noGrammarMatch;
+
+<cmdpartyhost>		= noGrammarMatch;
+
+
+#Tasks the command consists out of
+
+<goToLoc> 			= <V_go> <toLocPrep> (<NP_room> | <NP_placement> | <NP_beacon>);
+
+<findObj> 			= <V_find> <NP_object>;
+<findObjInRoom> 		= <V_find> (<NP_object> | <NP_category>) <inLocPrep> <NP_room>;
+
+<takeObj> 			= <V_take> <NP_object>;
+<takeObjFromPlcmt> 		= <V_take>  <NP_object> <fromLocPrep> (<NP_room> | <NP_placement>);
+
+<findPrs> 			= <V_find> (<NP_gestperson> | <NP_genderperson> | <NP_poseperson>);
+<findPrsInRoom> 		= <V_find> (<NP_gestperson> | <NP_genderperson> | <NP_poseperson>) <inLocPrep> <NP_room>;
+
+<placeObjOnPlcmt> 		= <V_place> <NP_object> <placePrep>  <NP_placement>;
+<placeObjPronOnPlcmt> 		= <V_place> <NP_objectpron> <placePrep>  <NP_placement>;
+
+<talkInfo> 			= <V_talk> <NP_talk>;
+<talkInfoToGestPrsInRoom> 	= <V_talk> <NP_talk> <talkPrep> <NP_gestperson> <inLocPrep> <NP_room>;
+
+<answerQuestion> 		= <V_answer> <NP_answer>;
+<answerToGestPrsInRoom> 	= <V_answer> <NP_answer> <talkPrep> <NP_gestperson> <inLocPrep> <NP_room>;
+
+<followPrs> 			= <V_follow> <NP_personalpron>;
+<followPrsToRoom> 		= <V_follow> <NP_personalpron> <toLocPrep> <NP_roomTwo>;
+<followNameFromBeacToRoom> 	= <V_follow> <NP_name> <fromLocPrep> <NP_beacon> <toLocPrep> <NP_roomTwo>;
+
+<meetName> 			= <V_meet> <NP_name>;
+<meetPrsAtBeac> 		= <V_meet> <NP_name> <atLocPrep> <NP_beacon>;
+
+<bringMeObj>    		= <V_bring> <NP_me> <NP_object>;
+<bringMeObjFromPlcmt> 		= <V_bring> <NP_me> <NP_object> <fromLocPrep> <NP_placement>;
+
+<countObjOnPlcmt> 		= <V_count> (<NP_object> | <NP_category>) there are <placePrep> <NP_placement>;
+<countPrsInRoom> 		= <V_count> people in <NP_room> <arePrep> (<NP_posture> | <NP_genderpersonplural>);
+
+<tellPrsInfoInLoc> 		= <V_tell> me <NP_personattribute> of the person <LocPrep> (<NP_room> | <NP_beacon>);
+<tellObjPropOnPlcmt> 		= <V_tell> me ((what is) | whats) <NP_objectprop> object <onLocPrep> <NP_placement>;
+<tellCatPropOnPlcmt> 		= <V_tell> me ((what is) | whats) <NP_objectprop> <NP_category> <onLocPrep> <NP_placement>;
+
+<deliverObjToMe> 		= <V_deliver> <NP_object> <deliverPrep> <NP_me>;
+<deliverObjPronToMe> 		= <V_deliver> <NP_objectpron> <deliverPrep> <NP_me>;
+<deliverObjToGestPrsInRoom> 	= <V_deliver> [<NP_objectpron>] <NP_object> <deliverPrep> <NP_gestperson> <inLocPrep> <NP_roomTwo>;
+<deliverObjToNameAtBeac> 	= <V_deliver> <NP_objectpron> <deliverPrep> <NP_name> <atLocPrep> <NP_beaconTwo>;
+
+<guidePrsBack>			= <V_guide> <NP_personalpron> back;
+<guidePrsToBeacon> 		= <V_guide> <NP_personalpron> <toLocPrep> <NP_beaconTwo>;
+<guideNameFromBeacToBeac> 	= <V_guide> <NP_name> <fromLocPrep> <NP_beacon> <toLocPrep> <NP_beaconTwo>;
+<guideNameToBeacFindAtBeac> 	= <V_guide> <NP_name> <toLocPrep> <NP_beaconTwo> you (may | can | will) find (them | him | her) <atLocPrep> <NP_beacon>;
+
+
+<deliverPrep> 			= to;
+<placePrep> 			= on;
+<inLocPrep> 			= in;
+<fromLocPrep> 			= from;
+<toLocPrep> 			= to;
+<atLocPrep> 			= at;
+<talkPrep> 			= to;
+<LocPrep> 			= in | at;
+<onLocPrep> 			= on;
+<arePrep> 			= are;
+
+<V_take>    			= bring | take | get | grasp | (pick up);
+<V_place>   			= put | place;
+<V_deliver> 			= bring | give | deliver;
+<V_bring> 			= bring | give;
+<V_go> 			= go | navigate;
+<V_find> 			= find | locate | (look for);
+<V_talk> 			= tell | say;
+<V_answer> 			= answer;
+<V_follow> 			= follow;
+<V_meet> 			= meet | face | contact;
+<V_guide> 			= guide | escort | take | lead | accompany;
+<V_tell> 			= tell;
+<V_count> 			= tell me how many;
+
+<NP_object>    			= (the <N_object>) | (a <N_object>) | (an <N_object>) | (<N_object>);
+<NP_objectpron> 		= (<N_objectpron>);
+<NP_category> 			= (the <N_category>) | <N_category>;
+<NP_objectprop> 		= (the <N_objectprop>);
+<NP_placement> 			= (the <N_placement>);
+<NP_placementTwo> 		= (the <N_placementTwo>);
+<NP_beacon> 			= (the <N_beacon>);
+<NP_beaconTwo> 			= (the <N_beaconTwo>);
+<NP_room> 			= (the <N_room>);
+<NP_roomTwo> 			= (the <N_roomTwo>);
+<NP_me>        			= (<N_me>);
+<NP_gestperson> 		= (the <N_gestperson>) | (a <N_gestperson>);
+<NP_poseperson> 		= (a <N_poseperson>);
+<NP_genderperson> 		= (a <N_genderperson>);
+<NP_genderpersonplural> 	= (<N_genderpersonplural>);
+<NP_name> 			= <N_name>;
+<NP_talk> 			= <N_talk>;
+<NP_answer> 			= <N_answer>;
+<NP_personalpron> 		= <N_personalpron>;
+<NP_personattribute> 		= (the <N_personattribute>);
+<NP_posture> 			= <N_posture>;
+
+<N_objectpron> 			= it;
+<N_objectprop> 			= biggest | largest | smallest | heaviest | lightest | thinnest;
+<N_me>        			= me;
+<N_gestperson> 			= (person waving) | (person (raising | rising) [their] (left|right) arm) | (person pointing to the (left|right)) | (person calling);
+<N_poseperson> 			= (person sitting) | (person standing) | (person lying down);
+<N_genderperson> 		= man | woman | boy | girl | (male person) | (female person);
+<N_genderpersonplural> 		= men | women | boys | girls | male | female;
+<N_talk> 			= (something about yourself) | (the time) | (what day is (today | tomorrow)) | (your teams (name | country | affiliation)) | (the day of the (week | month)) | (a joke);
+<N_answer> 			= (a question);
+<N_personalpron> 		= them | her | him;
+<N_personattribute> 		= name | gender | pose;
+<N_posture> 			= sitting | standing | lying down;
+
+<N_object_old>    			= basket | cereals | cloth | (coconut milk) | coke | cornflakes | noodles | orange (juice | drink) | peas | plate | pringles | red bowl | salt | soap | sponge | (tomato paste) | water;
+<N_object>              = (chocolate milk) | milk | cola | (soap box) | (choco krispies) | bowl | plate | fork | knife | spoon | cup | lemon | banana | peach | pear;
+<N_category_old> 			= care | drink | (cleaning stuff) | container | food | snack | cutlery;
+<N_category>          = fruits | cutlery | drinks | snacks | (pantry items);
+<N_room_old> 			= corridor | (living room) | kitchen | (bath room);
+<N_room>          = kitchen | (living room) | hallway | bathroom | office;
+<N_roomTwo> 			= corridor | (living room) | kitchen | (bath room);
+<N_placement_old> 			= (living table) | (kitchen counter) | sink | stove | cabinet | bar;
+<N_placementTwo_old> 		= (living table) | (kitchen counter) | sink | stove | cabinet | bar;
+<N_placement>     = (kitchen table) | desk | (side board) | (side table) | sink | (kitchen counter) | cabinet | workstation;
+<N_placementTwo>  = (kitchen table) | desk | (side board) | (side table) | sink | (kitchen counter) | cabinet | workstation;
+<N_beacon_old> 			= (living table) | sink | bar | sofa | fridge | (comfy chair);
+<N_beaconTwo_old> 			= (living table) | sink | bar | sofa | fridge | (comfy chair);
+<N_beacon>        = fridge | sink | dishwasher | (easy chair) | (arm chair) | (kitchen table) | workstation;
+<N_beaconTwo>     = fridge | sink | dishwasher | (easy chair) | (arm chair) | (kitchen table) | workstation;
+<N_name_old> 			= emma | olivia | sophia | ava | isabella | mia | abigail | emily | charlotte | harper | noah | liam | mason | jacob | william | ethan | james | alexander | michael | benjamin;
+<N_name>          = amelia | angel | ava | charlie | charlotte | hunter | max | mia | olivia | parker | sam | jack | noah | oliver | thomas | william;