diff --git a/tsg_util/tsg_header.m b/tsg_util/tsg_header.m
new file mode 100644
index 0000000000000000000000000000000000000000..26c30372e0d999feec9e1c512b58c107e922f539
--- /dev/null
+++ b/tsg_util/tsg_header.m
@@ -0,0 +1,227 @@
+function error = tsg_header(hTsgGUI)
+%
+% Input
+% -----
+% hTsgGUI ............ Handel to the main user interface
+%
+% Output
+% ------
+% error .............. 1: OK ; -1 : an error occured
+
+% $Id$
+
+error = -1;
+
+% Get the data from the application GUI
+% -------------------------------------
+tsg = getappdata( hTsgGUI, 'tsg_data');
+
+% Define uicontrol start position
+% -------------------------------
+left   = .01;
+bottom = .95;
+inc_x  =  0.5;
+inc_y  =  0.03;
+
+% set default uicontrol size
+% --------------------------
+default_height = 0.018;
+default_length = .1;
+
+
+% Get global attributes list from class tsg_nc with file 'tsg_ncattr.csv'
+% -----------------------------------------------------------------------
+nca      = tsg_nc('tsg_ncattr.csv');
+nca_keys = keys(nca);
+
+
+% header Uicontrols in a new figure
+% ---------------------------------
+hHeaderFig = figure(...
+   'BackingStore','off',...
+  'Name', 'TSG GLOBAL ATTRIBUTES', ...
+  'NumberTitle', 'off', ...
+  'Resize', 'on', ...
+  'Menubar','none', ...
+  'Toolbar', 'none', ...
+  'Tag', 'GLOBAL_ATTRIBUTES', ...
+  'Visible','on',...
+  'Units', 'normalized',...
+  'Position',get(hTsgGUI,'Position'), ...
+  'Color', get( 0, 'DefaultUIControlBackgroundColor' ));
+
+% bg = [0.92549 0.913725 0.847059] = get( 0, 'DefaultUIControlBackgroundColor' );
+
+% Display fields from class
+% -------------------------
+for i=1:numel(nca_keys)
+  % get key, use {} for cell
+  key = nca_keys{i};
+  % get all structure for the key
+  s = get(nca, key);
+  
+  % check for empty field and replace them by default value
+  % -------------------------------------------------------
+  if isempty(s.length), s.length = default_length; end;
+  if isempty(s.height), s.height = default_height; end;
+      
+  % display dynamic uicontrol text
+  % use of char function prevent error when field is empty [] => ''
+  % ---------------------------------------------------------------
+  uicontrol(...
+    'Parent', hHeaderFig, ...
+    'Units', 'normalized', ...
+    'Style', 'Text', ...
+    'HorizontalAlignment', 'left', ...
+    'Position',[left, bottom, .8, .0135], ...
+    'TooltipString', char(s.comment), ...
+    'String', char(s.name) );
+  
+  % display dynamic uicontrol 
+  % -------------------------
+  ui = uicontrol(...
+    'Parent', hHeaderFig, ...
+    'Units', 'normalized', ...
+    'BackgroundColor', 'w', ...
+    'Style', char(s.uicontrolType), ...
+    'HorizontalAlignment', char(s.horizontalAlignment), ...
+    'Position',[left+.09, bottom, s.length, s.height], ...
+    'String', char(s.string), ...
+    'Value', s.value, ...
+    'Tag', key);
+  
+  % set dynamically uicontrol
+  % -------------------------
+  switch s.uicontrolType
+    case 'popupmenu'
+      str = cellstr(get(ui,'String'));
+      ind = strfind(str,tsg.(key));
+      for k=1:numel(ind)
+        if ~isempty(ind{k})
+          set(ui, 'value', k);
+        end
+      end
+    case 'edit'
+      set(ui, 'string', tsg.(key));
+  end
+  
+  % Check vertical position of last uicontrol and creation new colomn
+  % -----------------------------------------------------------------
+  bottom = bottom - inc_y;
+  if bottom < .15
+    bottom = 0.95;
+    left = left + inc_x;
+  end  
+end
+
+
+% CONTINUE PUSH BUTTON
+% --------------------
+% The Continue (valid)  button
+uicontrol( ...
+  'Parent', hHeaderFig, ...
+  'Style','pushbutton',...
+  'Units', 'normalized', ...
+  'Position',[.05, .1, .05, .02],...
+  'String','Continue',...
+  'Interruptible','off',...
+  'BusyAction','cancel',...
+  'Tag','PUSH_BUTTON',...
+  'Callback', @continueCallback);
+
+% CANCEL PUSH BUTTON
+% ------------------
+% The cancel  button
+uicontrol( ...
+  'Parent', hHeaderFig, ...
+  'Style','pushbutton',...
+  'Units', 'normalized', ...
+  'Position',[.15, .1, .05, .02],...
+  'String','Cancel',...
+  'Interruptible','off',...
+  'BusyAction','cancel',...
+  'Tag','PUSH_BUTTON',...
+  'Callback', @cancelCallback);
+
+% Build structure container for graphic handles with tag property defined.
+% ------------------------------------------------------------------------
+data = guihandles(hHeaderFig);
+
+% record data struct in application data object 
+% ---------------------------------------------
+%guidata(hHeaderFig, data);
+
+% stop execution until push-button Continue was press
+% ---------------------------------------------------
+uiwait(hHeaderFig);
+
+%% Nested callback
+  function continueCallback(obj, event)
+    
+    % get uicontrol filelds and populate tsg structure
+    % ------------------------------------------------
+    tsg.PLATFORM_NAME     = get(data.PLATFORM_NAME, 'string');
+    tsg.SHIP_CALL_SIGN    = get(data.SHIP_CALL_SIGN, 'string');
+    tsg.SHIP_MMSI         = get(data.SHIP_MMSI, 'string');
+    tsg.TSG_TYPE          = get(data.TSG_TYPE, 'string');
+    tsg.TSG_TYPE          = tsg.TSG_TYPE(get(data.TSG_TYPE, 'value'),:);
+    tsg.TSG_NUMBER        = get(data.TSG_NUMBER, 'string');
+    tsg.TINT_TYPE         = get(data.TINT_TYPE, 'string');
+    tsg.TINT_TYPE         = tsg.TINT_TYPE(get(data.TINT_TYPE, 'value'),:);
+    tsg.TINT_NUMBER       = get(data.TINT_NUMBER, 'string');
+    tsg.DATA_TYPE         = get(data.DATA_TYPE, 'string');
+    tsg.DATA_MODE         = get(data.DATA_MODE, 'string');
+    tsg.DATA_MODE         = tsg.DATA_MODE(get(data.DATA_MODE, 'value'),:);
+    tsg.SAMPLING_PERIOD   = get(data.SAMPLING_PERIOD, 'string');
+    tsg.PROCESSING_STATUS = get(data.PROCESSING_STATUS, 'string');
+    tsg.DATE_START        = get(data.DATE_START, 'string');
+    tsg.DATE_END          = get(data.DATE_END, 'string');
+    tsg.SOUTH_LATX        = get(data.SOUTH_LATX, 'string');
+    tsg.NORTH_LATX        = get(data.NORTH_LATX, 'string');
+    tsg.WEST_LONX         = get(data.WEST_LONX, 'string');
+    tsg.EAST_LONX         = get(data.EAST_LONX, 'string');
+    tsg.FORMAT_VERSION    = get(data.FORMAT_VERSION, 'string');
+    tsg.DATE_CREATION     = get(data.DATE_CREATION, 'string');
+    tsg.DATE_UPDATE       = get(data.DATE_UPDATE, 'string');
+    tsg.DATA_RESTRICTIONS = get(data.DATA_RESTRICTIONS, 'string');
+    tsg.COMMENT           = get(data.COMMENT, 'string');
+    tsg.PROJECT_NAME      = get(data.PROJECT_NAME, 'string');
+    tsg.PI_NAME           = get(data.PI_NAME, 'string');
+    tsg.DATA_CENTRE       = get(data.DATA_CENTRE, 'string');
+    tsg.DATA_ACQUISITION  = get(data.DATA_ACQUISITION, 'string');
+    tsg.PROCESSING_CENTRE = get(data.PROCESSING_CENTRE, 'string');
+    tsg.PROCESSING_STATES = get(data.PROCESSING_STATES, 'string');
+
+    % Save tsg structure 
+    % ------------------
+    setappdata( hTsgGUI, 'tsg_data', tsg);
+ 
+    % close windows (replace call to uiresume(hHeaderFig))
+    % ----------------------------------------------------
+    close(hHeaderFig);
+    
+    % flushes the event queue and updates the figure window
+    % -----------------------------------------------------
+    drawnow;
+    
+    % return no error code (true)
+    % ---------------------------
+    error = 1;
+  end
+
+  function cancelCallback(obj, event)
+    
+    % close windows
+    % -------------
+    close(hHeaderFig);
+    
+    % flushes the event queue and updates the figure window
+    % -----------------------------------------------------
+    drawnow;
+    
+    % return error code (no change)
+    % -----------------------------
+    error = -1;
+  end
+
+end