diff --git a/+PlotID/Publish.m b/+PlotID/Publish.m
index 641b05d1aa6efa03681708e5ed925eeb7d3e122c..f7c55a298a4e45ba0ad32b60523c5cfb35f850c2 100644
--- a/+PlotID/Publish.m
+++ b/+PlotID/Publish.m
@@ -1,5 +1,13 @@
-function Publish(DataPaths, ID, figure, options)
-%Publishes saves plot, data and measuring script 
+function Publish(DataPaths,scriptPath, ID, figure, options)
+%%Publish(DataPaths,scriptPath, ID, figure, options) saves plot, data and measuring script 
+%
+%   DataPaths contains the path(s) to the research data, for multiple files
+%   use a cell array
+%   scriptPath contains the path to the script, this can be provided with
+%   the simple call of scriptPath = [mfilename('fullpath'),'.m'], note that
+%   the extension is mandatory
+%
+%   Options:
 %   Location sets the storage location. 'local' sets the storage location
 %   to the current folder (an export folder will be created), 'server' is a
 %   remote path, that is defined in the config file.
@@ -10,7 +18,8 @@ function Publish(DataPaths, ID, figure, options)
 %   path is used, PlotId will use this path a storagePath
 
 arguments
-   DataPaths
+   DataPaths {mustBeDataPath} % location of the data-file(s)
+   scriptPath (1,:) {mustBeFile} % location of the matlab script
    ID (1,:) {mustBeNonzeroLengthText} % ID must be provided
    figure (1,:) {mustBeFigure} % Checks if figure is a figure object
    options.Location {mustBeMember(options.Location ,{'local','server','manual','CI-Test'})} = 'local' % storage path
@@ -48,8 +57,8 @@ switch options.Location
             storPath = options.ParentFolder;
         else
             % use the script path as export path
-            scriptPath = fileparts(DataPaths.script);
-            storPath = fullfile(scriptPath,options.ParentFolder);
+            scriptLocation = fileparts(scriptPath);
+            storPath = fullfile(scriptLocation,options.ParentFolder);
         end
     case 'server' %from config File
          storPath = config.ServerPath;
@@ -71,12 +80,12 @@ disp(['publishing of ', ID, ' started']);
 
 %% Create a Copy of the script and user functions(optional)
 % script
-PlotID.createFileCopy({[DataPaths.script,'.m']},folderName,storPath,ID, 'script');
+PlotID.createFileCopy({scriptPath},folderName,storPath,ID, 'script');
 
 % user functions
-[fList,pList] = matlab.codetools.requiredFilesAndProducts(DataPaths.script);
+[fList,pList] = matlab.codetools.requiredFilesAndProducts(scriptPath);
 if options.CopyUserFCN 
-   fList = fList(~ismember(fList,[DataPaths.script,'.m'])); % rmv script from list
+   fList = fList(~ismember(fList,scriptPath)); % rmv script from list
    fList = fList(~contains(fList,'config.json')); % rmv config.json from list
    fList = PlotID.removePltIdFiles(fList); % Do not copy files that are part of plot ID
    if ~isempty(fList)
@@ -103,9 +112,9 @@ switch options.Method
                 
         % Check if the new plot is based on the original data-set    
             % copy the data(once)
-        for i=1:numel(DataPaths.rdata)            
+        for i=1:numel(DataPaths)            
             % check if identical file exists (status = 1)
-            [~, idx] = PlotID.fileCompare(DataPaths.rdata{i},fList);
+            [~, idx] = PlotID.fileCompare(DataPaths{i},fList);
             % create Linked HDF5 files for identical files
             if any(idx)
                 fList.path = fullfile(fList.folder,fList.name);
@@ -117,10 +126,10 @@ switch options.Method
                 end
             else % no identical file exists
                 %Copy the file in data and create the links (if hdf5)
-                [dataPath] = PlotID.createFileCopy(DataPaths.rdata{i},'data',storPath,ID,'dataCentral');
+                [dataPath] = PlotID.createFileCopy(DataPaths{i},'data',storPath,ID,'dataCentral');
                 relativeDataPath = strrep(dataPath,currentPath,'');
                 %WIP
-                if contains(DataPaths.rdata{i},{'.h5','.hdf5'}) % Linking only for HDF5
+                if contains(DataPaths{i},{'.h5','.hdf5'}) % Linking only for HDF5
                    % and create also linked files in the plot folder 
                    PlotID.createLinkedHDF5(relativeDataPath,storPath,ID);
                 end  %if
@@ -129,7 +138,7 @@ switch options.Method
         clear DataFolderName 
     case 'individual'
         % Create a copy of the research data    
-        PlotID.createFileCopy(DataPaths.rdata,folderName,storPath,ID, 'data');
+        PlotID.createFileCopy(DataPaths,folderName,storPath,ID, 'data');
 end
 %% Write Config File
 
@@ -174,8 +183,8 @@ disp(['publishing of ', ID , ' done']);
 % CSV EXport
 if options.CSV
   T = table();
-  T.research_Data = DataPaths.rdata'; T.PlotID(:) = {ID};
-  T.Script_Name(:) = {[DataPaths.script,'.m']};
+  T.research_Data = DataPaths'; T.PlotID(:) = {ID};
+  T.Script_Name(:) = {scriptPath};
   T.Storage_Location(:) = {storPath};
   T.Date(:) = {datestr(now)};
   T = movevars(T,'PlotID','before',1);
@@ -184,7 +193,28 @@ end
 
 end %function
 
+%% Argument Validation Functions
 function tf = mustBeFigure(h)
 %checks if input is a figure object
   tf = strcmp(get(h, 'type'), 'figure') & isa(h, 'matlab.ui.Figure');  
 end
+
+function mustBeDataPath(DataPaths)
+%checks if input is a valid DataPath object
+
+  if iscellstr(DataPaths)
+     tf = zeros(1,numel(DataPaths)); 
+     for i=1:numel(DataPaths)
+         tf(i) = ~isfile(DataPaths{i});
+     end
+  else
+      tf = ~isfile(DataPaths);
+  end
+  
+  if any(tf)
+     eidType = 'mustBeDataPath:notaValidFilePath';
+     msgType = 'DataPaths must contain file-path(s)';
+     throwAsCaller(MException(eidType,msgType))
+  end
+end
+
diff --git a/CI_files/default_test.m b/CI_files/default_test.m
index 16166366c266554202ce51d8400035cd5c2dcd5f..110a1ba207ffb9984c3ed9b5222f7edefa4e9b75 100644
--- a/CI_files/default_test.m
+++ b/CI_files/default_test.m
@@ -1,5 +1,5 @@
 function [result] = default_test()
-%UNTITLED2 This is a simple test if Plot ID works for the default settings
+%default_test() This is a simple test if Plot ID works for the default settings
 %   Detailed explanation goes here
 
 clear; clc; close all;
@@ -23,8 +23,8 @@ x1 = linspace(0,2*pi);
 y1 = sin(x1)+2;
 
 % define file path & name
-fpath = "CI_files/testdata_2.h5";
-dataset2 = 'testdata_2.h5';
+fpath = "CI_files/testdata2.h5";
+dataset2 = 'CI_files/testdata2.h5';
 
 % create hdf5 file and dataset > write data to hdf5 file / dataset
 h5create(fpath, "/x1", size(x1), "Datatype", class(x1))
@@ -51,12 +51,12 @@ try
 
     % The functions needs the file location, the location of the data and the
     % figure
-    path.script = mfilename('fullpath'); % filename of the m.script
+    script = [mfilename('fullpath'),'.m']; % filename of the m.script
 
     % file name of the data
-    path.rdata =  {dataset1,dataset2} ; % don't forget the extension
+    rdata =  {dataset1,dataset2} ; % don't forget the extension
 
-    PlotID.Publish(path, ID, figs, 'Location', 'CI-Test')
+    PlotID.Publish(rdata,script, ID, figs, 'Location', 'CI-Test')
     result = true;
     
     % clean up 
diff --git a/README.md b/README.md
index 83e88a152b92188d60874df012febdad41e3bce5..85a19827dfe9ae3a4b53ee1af392c5bd47ba8a5e 100644
--- a/README.md
+++ b/README.md
@@ -18,11 +18,12 @@ Feel free to give feedback and feature requests or to take part in the developme
 
 
 2. publishing the plot and the associated data
-`plotID.Publish(DataPaths, ID, figure, options)`
+`plotID.Publish(DataPaths,scriptPath, ID, figure, options)`
 
-`DataPaths.script = mfilename('fullpath');` contains the filename of the m.script
+`scriptPath` contains the path to the script, this can be provided with  the simple call of `scriptPath = [mfilename('fullpath'),'.m']`, note that
+ **the extension is mandatory.**
 
-`DataPaths.rdata =  {dataset1, dataset2};`  file names of the datasets (they most be at the path)
+`DataPaths` contains the path(s) to the research data, for multiple files you can use a cell arrays (they must be at the path).
 
 You should either set a ProjectID in the config.json (copy & rename the 'example-config.json' to 'config.json'), or pass it as option 'ProjectID' to the TagPlot function.
 
@@ -63,7 +64,7 @@ FriendlyID Changes the Hex Number to a human friendly *datetime* and *dateStr*.
 
 
 # PlotID.Publish() 
-`Publish(DataPaths, ID, figure, options)` \
+`Publish(DataPaths,scriptPath, ID, figure, options)` \
 Publishes saves plot, data and measuring script 
 Location sets the storage location. 'local' sets the storage location  to the current folder (an export folder will be created), 'server' is a remote path, that is defined in the config file. Two Methods are implemented 'individual' stores the data for each plot while 'centralized' uses a data folder and uses reference links to the original data (hdf5 only). ParentFolder is the folder Name where the exported data is stored if a path is used, PlotId will use this path a storagePath
 
diff --git a/example.m b/example.m
index 4241d7d3a077b364c523c48f0ab6dc04fb1ce046..df343c0e1d4607019a4f57fab6e4370217804991 100644
--- a/example.m
+++ b/example.m
@@ -68,14 +68,17 @@ set(gca, 'TickDir', 'out', 'YLim', [0,4]);
 % The functions needs the file location of the script, the location of the
 % data and the figure and can take several options (see readme). 
 
-locations.script = mfilename('fullpath'); % filename of the m.script
+% filename of the m.script, extension must be added!
+scriptPath = [mfilename('fullpath'),'.m']; 
+
 % file names of the datasets
 
 %(defined above:) dataset1 = 'test_data.mat'; dataset2 = 'testdata2.h5'
-locations.rdata =  {dataset1,dataset2} ; % don't forget the extension
+locations =  {dataset1,dataset2} ; % don't forget the extension
 
+%locations =  {'test_data.mat', 'falsch'};
 %call publishing
-PlotID.Publish(locations, ID, fig(1), 'Location', 'local' ,'Method','individual')
+PlotID.Publish(locations,scriptPath, ID, fig(1), 'Location', 'local' ,'Method','individual')
 
 %% Example 2: multiple plots plot, all based on dataset2 (hdf5)
 % for individual data-sets, use an appropriate array
@@ -90,13 +93,13 @@ set(gca, 'TickDir', 'out', 'YLim', [0,4]);
 [fig, IDs] = PlotID.TagPlot(fig,'ProjectID', ProjectID);
 
 % data locations
-path.script = mfilename('fullpath'); % filename of the m.script
+script = [mfilename('fullpath'),'.m']; % filename of the m.script
 % file names of the datasets
-path.rdata =  {dataset2} ; % don't forget the extension
+rdata =  dataset2 ; % don't forget the extension
 
 % publsihing via a for-loop
 for i=1: numel(fig)
-    PlotID.Publish(path, IDs{i}, fig(i), 'Location', 'local',...
+    PlotID.Publish(rdata, script, IDs{i}, fig(i), 'Location', 'local',...
         'Method','individual');
 end
 
@@ -114,4 +117,4 @@ plot(x1,y1,'-r');
 
 [fig2, ID] = PlotID.TagPlot(fig2,'ProjectID', ProjectID);
 
-PlotID.Publish(path, ID, fig2, 'Location', 'local','Method','centralized')
+PlotID.Publish(locations,scriptPath, ID, fig2, 'Location', 'local','Method','centralized')