diff --git a/crpptbx/D3D/get_signal_d3d.m b/crpptbx/D3D/get_signal_d3d.m
index e0d0a0d475e9da566d5a3ac5a1b34f2870a1ced1..71a18725856c8a60fd48aa6dde45fd3ef00a40bf 100644
--- a/crpptbx/D3D/get_signal_d3d.m
+++ b/crpptbx/D3D/get_signal_d3d.m
@@ -1,6 +1,14 @@
 function [gdat_data,error_status] = get_signal_d3d(signal,gdat_data);
 
-gdat_data.data = mdsvalue(signal);
+if strcmp(lower(gdat_data.gdat_params.tree),'d3d') && strcmp(signal(1),'\')
+  % try also ptdata
+  gdat_data.data = mdsvalue(['_sOS=' signal]);
+  if ischar(gdat_data.data) % could check if "not found" present, but not all cases
+    gdat_data.data = mdsvalue(['_sOS=ptdata(''' signal ''',' num2str(gdat_data.shot) ')']);
+  end
+else
+  gdat_data.data = mdsvalue(['_sOS=' signal]);
+end
 error_status = 1;
 
 gdat_data.dim = [];
@@ -9,11 +17,11 @@ gdat_data.t = [];
 gdat_data.x = [];
 nbdims=numel(setdiff(size(gdat_data.data),1));
 if ~isempty(gdat_data.data) && ~ischar(gdat_data.data)
-  gdat_data.units = mdsvalue(['units_of(' signal ')']);
+  gdat_data.units = mdsvalue(['units_of(' '_sOS' ')']);
   if prod(size(gdat_data.data)) > 1
     for i=1:nbdims
-      gdat_data.dim{i} = mdsvalue(['dim_of(' signal ',' num2str(i-1) ')']);
-      % gdat_data.dimunits{i} = mdsvalue(['dimunits_of(' signal ',' num2str(i-1) ')']);
+      gdat_data.dim{i} = mdsvalue(['dim_of(' '_sOS' ',' num2str(i-1) ')']);
+      % gdat_data.dimunits{i} = mdsvalue(['dimunits_of(' '_sOS' ',' num2str(i-1) ')']);
       gdat_data.dimunits{i} = 'to get';
     end
     if nbdims==1