diff --git a/+PlotID/TagPlot.m b/+PlotID/TagPlot.m
index d940a5dc29e9cc7b4869e9f86eab8721b37437ed..b2e5b561647381b47449adb840b6eb1146587414 100644
--- a/+PlotID/TagPlot.m
+++ b/+PlotID/TagPlot.m
@@ -24,6 +24,8 @@ arguments
     options.Position (1,2) {mustBeVector} = [1,0.4] % default for east
     options.Rotation (1,1) {mustBeReal} = NaN
     options.ConfigFileName (1,:) {mustBeText} = 'config.json'
+    options.QRcode (1,1) {mustBeNumericOrLogical} = false %experimental
+    options.QRsize (1,1) {mustBeNonnegative} = 0.15 % size of the QRCode
 end
 
 if isempty(options.ProjectID)
@@ -73,16 +75,25 @@ IDs = cell(numel(figs),1);
 for n = 1:numel(figs)
     IDs{n} = PlotID.CreateID; % Create ID
     IDs{n} = [options.ProjectID,'-',IDs{n}]; % add options.ProjectID
-    axes = get(figs(n),'CurrentAxes'); % Axes object for text annotation
+    pltAxes = get(figs(n),'CurrentAxes'); % Axes object for text annotation
     % Limits for relative Positioning
-    ylim =get(axes,'YLim');
-    xlim =get(axes,'XLim');
+    ylim =get(pltAxes,'YLim');
+    xlim =get(pltAxes,'XLim');
     %ID
     position = [options.Position(1), options.Position(2)];
-    text(axes,position(1),position(2), IDs{n},'Fontsize',options.Fontsize,...
+    t=text(pltAxes,position(1),position(2), IDs{n},'Fontsize',options.Fontsize,...
     'Rotation',Rotation, 'VerticalAlignment','bottom','Color',...
         options.Color,'BackgroundColor','w', 'Units', 'normalized');
-    set(figs(n),'Tag', IDs{n});    
+    set(figs(n),'Tag', IDs{n}); 
+
+    if options.QRcode
+        % this should be seen and use as a proof of concept
+        qrCode = PlotID.plotQR(IDs{n});
+        size = options.QRsize;
+        axes('Position',[position(1)-.05 position(2)+0.1 size size]);
+        imshow(qrCode);
+        t.Visible = 'off';
+    end
 end
 
 if numel(figs) == 1
diff --git a/+PlotID/plotQR.m b/+PlotID/plotQR.m
new file mode 100644
index 0000000000000000000000000000000000000000..4e44b97225482139ecd847150462cc188b15a96f
--- /dev/null
+++ b/+PlotID/plotQR.m
@@ -0,0 +1,22 @@
+function img = plotQR(data, size)
+%QR reads a QR code from qrserver (depends on API)
+% created by J.Stifter
+    arguments
+        data {mustBeTextScalar} = 'example';
+        size (1,2) {mustBeInteger} = [150, 150];
+    end
+    
+    m = size(1);
+    n = size(2);
+    
+    base_api = 'https://api.qrserver.com/v1/create-qr-code/?size=%dx%d&data=%s';
+    request = sprintf(base_api, m, n, data);
+    
+    options = weboptions;
+    options.Timeout = 5;
+    
+    img = webread(request, options);
+    img =logical(img);
+
+end
+
diff --git a/Examples/PlotID_QRcode.m b/Examples/PlotID_QRcode.m
new file mode 100644
index 0000000000000000000000000000000000000000..c3308984ea3584fca2444117a097f3b900a116ef
--- /dev/null
+++ b/Examples/PlotID_QRcode.m
@@ -0,0 +1,14 @@
+clear; close all; clc;
+%%  Tag the plot with a QR code (experimental)
+% here the work flow for tagging the plot with a QR code is shown
+% the content of the qr code is the ID
+
+% plots and data
+fig(1) = figure;
+[x1, y1, datapath1] = createExampleData('matlab');
+plot(x1,y1,'-b'); box off; hold on; set(gca, 'TickDir', 'out', 'YLim', [0,4]);
+
+
+%% 1. Tag plot with QRcode
+% QR size is the relative size of the QR code (0.15 default)
+[fig, IDs] = PlotID.TagPlot(fig,'Location','southeast','QRcode',true, 'QRsize', 0.18);