diff --git a/AssociativeTask/functions/StimuliAllocationPractice.m b/AssociativeTask/functions/StimuliAllocationPractice.m
new file mode 100644
index 0000000000000000000000000000000000000000..d14e88cb7c473929d66b465150007b7c691845a4
--- /dev/null
+++ b/AssociativeTask/functions/StimuliAllocationPractice.m
@@ -0,0 +1,87 @@
+function [stim, TotalTrials] = StimuliAllocationPractice(TaskDir, SubjectInfo)
+%% Allocate stimuli for the task practice
+
+%% Clear the workspace and the screen
+rand('state',sum(100*clock));
+
+%% Specify stimuli directories
+FacesDir = ([TaskDir filesep 'resources' filesep 'practice' filesep 'faces']);
+ObjectsDir = ([TaskDir filesep 'resources' filesep 'practice' filesep 'objects']);
+
+addpath(genpath([TaskDir filesep 'functions']));
+
+%% Parameters
+TotalTrials = SubjectInfo.TotalTrials; 
+
+%% Create stimuli table
+
+stim = table;
+stim.trial = (1:TotalTrials)';
+
+faces = dir([FacesDir filesep '*N.jpg']);
+facesuse = randperm(size(faces,1),(TotalTrials));
+allfaces = struct2table(faces(facesuse));
+stim.name = allfaces.name;
+stim.folder = allfaces.folder;
+
+% Select one object per face for target and distractor
+objects = dir([ObjectsDir filesep '*.jpg']);
+objectsuse = randperm(size(objects,1),(TotalTrials*4)); % multiplied by 4 because half will be targets and the other half distractors
+objtarget = objectsuse(1:2:TotalTrials*2);
+objdist = objectsuse(2:2:TotalTrials*2);
+
+%
+stim.targetnumber = objtarget';
+stim.distractornumber = objdist';
+
+% Objects
+
+for ii=1:height(stim)
+    targetname{ii,:} = objects(stim.targetnumber(ii)).name;
+    targetfolder{ii,:} = [objects(stim.targetnumber(ii)).folder filesep objects(stim.targetnumber(ii)).name];
+
+    distractorname{ii,:} = objects(stim.distractornumber(ii)).name;
+    distractorfolder{ii,:} = [objects(stim.distractornumber(ii)).folder filesep objects(stim.distractornumber(ii)).name];
+end
+
+
+stim.targetname = targetname;
+stim.targetfolder = targetfolder;
+stim.distractorname = distractorname;
+stim.distractorfolder = distractorfolder;
+
+% Add a foil per trial - only rule is that the foil cannot match the target
+pass=0;
+targetn = stim.targetnumber;
+while pass<1
+    idx = targetn(randperm(numel(targetn)));
+    if any(targetn==idx)
+        pass=0;
+    else
+        pass=1;
+    end
+end
+
+stim.foilnumber = idx;
+for ii=1:height(stim)
+    foilname{ii,:} = objects(stim.foilnumber(ii)).name;
+    foilfolder{ii,:} = [objects(stim.foilnumber(ii)).folder filesep objects(stim.foilnumber(ii)).name];
+end
+stim.foilname = foilname;
+stim.foilfolder = foilfolder;
+
+% Define recall position
+pass=0;
+while pass<1
+    OrderResp = randperm(numel(1:TotalTrials));
+    y = intersect(OrderResp(end-1:end),(1:2)); % last two encode cannot be the 1st or 2nd to recall
+    if isempty(y)
+        pass=1;
+    end
+end
+
+stim.orderresp = OrderResp';
+
+
+
+end