BACKGROUND 
     This invention relates to the field of re-arranging a display in a viewable area. In particular, this invention relates to re-arranging a display in response to dynamic feedback. 
     Human interaction with digital displays is subject to constant attempts to improve. Graphical User Interfaces (GUIs) are popular but limited display space can mean a cluttered desktop. Solutions to desktop limitations include simple tool bars showing open windows that allow you to switch between active tasks, the ability to tile windows, and more recently Mac OS X (trade marks of Apple Computer, Inc.) have provided a feature that allows the temporary tiling of windows for tasks for the duration of a key press, snapping back to previous arrangement when the key is released. All of these systems have their benefits, but none truly optimizes the desktop space available. 
     In the world of augmented reality in which a computer display is overlaid on the real world, there is the issue of a finite field of vision. None of the solutions to desktop limitations applies easily to augmented reality displays. Simply stated, the problem is providing the best selection of data in a limited space, be that a monitor display, or a heads up display (HUD) imposed on a field of vision. 
     BRIEF SUMMARY 
     The aim of the present invention is to provide an improved display. 
     In the context of a GUI, the available viewing area is divided into minimum display units. For example, minimum display units may be something big enough to display a single icon (e.g. in the form of a button, readout etc). This would form a virtual grid on the viewable area. On a real time basis, the units of the grid can be given values that indicate their appropriateness for having system displays placed in them, where a system display would be anything that is not the last one or two accessed windows. 
     By prioritizing the items available to display (based on predefined user preferences), items can be matched up with appropriate available grid units dynamically, and potentially removed from the display entirely when no suitable space is left for allocation. This has the advantage that the user simply needs to move the window(s) that he is interested in, and the desktop will dynamically bring the most relevant things into available window slots. This minimizes the time required to access functions. 
     In a game world, where first person games often use a HUD, game artificial intelligence could make similar judgments based on what environment the player is in. For example, if a player is running down a corridor where most of the display is walls, there is no problem displaying lots of helpful info, but in a wide open space where you might want most of the display uncluttered all but the most high priority displays can disappear, leaving remaining display to shift to the smaller area of “unimportant” viewing area (typically the ground). 
     This also applies to HUD&#39;s that are beginning to find their way into cars and motorbikes. This kind of technology is beginning to bring more information into people&#39;s field of view, but currently such information is fixed position. By utilizing information gathered on the direction of the road, the HUD could use this grid/priority system to move display components away from important areas. A good example would be that while driving around a bend, a driver needs to glance along the bend which is off to one side of his vision, while also watching the road immediately in front, this system would simply move elements away from that area while it is important to keep clear, and re-use it as soon as it will no longer obscure the driver&#39;s view. 
     As the wealth of data available increases, and the best mechanism to accumulate that information remains through visual and audio queues (where audio is limited due to people&#39;s ability to differentiate overlapped sounds), then more and more intelligent ways are needed to display useful/important data in what is a relatively fixed field of vision. 
     According to a first aspect of the present invention there is provided a method for re-arranging a display in a viewable area, comprising: dividing the viewable area into units; determining the contents of units of the viewable area; prioritizing the availability of the units by content; and allocating one or more display items in the prioritized available units. 
     Preferably, a plurality of display items are provided and are allocated according to a determined order. The determined order may be by one or more of the following determinations: a user preference; the contents of the viewable area; the activity of the user; and environmental parameters. For example, the priority order of display items may be changed depending on the contents of the viewable area, the activity of the user or environmental parameters, at a given time. In this way, if the user is carrying out a particular task, for example, the display items relating to that task may take priority. 
     The number of display items may be determined by one or more of the following determinations: a user preference; the contents of the viewable area; the activity of the user; and environmental parameters. The number of display items may vary depending on user preferences, the contents of the viewable area, the activity of the user or environmental parameters, at a given time. For example, a limited number of display items may be provided if the user is undertaking a complicated task that requires few distractions. 
     The one or more display items may have allocation preferences determining their position and association with other display items. For example, a display item may have an allocation preference to be displayed adjacent a specified other display item. 
     The step of determining the contents of the viewable area may translate the contents into computer understood terms. In the case of the viewable area being a graphical user interface of a computer or game console, the contents of the viewable area may already be in computer understood terms. However, the contents of the viewable area in the case of a heads up display in a vehicle may need to be interpreted into computer understood terms. 
     The step of prioritizing the availability of the units by content may exclude some units from availability for display. Units in which the content is very important to be seen by the user may be excluded from displaying display items. 
     The viewable area may be divided into a virtual grid of grid units. 
     The steps of determining the contents of units of the viewable area, prioritizing the availability of the units by content, and allocating one or more display items in the prioritized available units may be repeated at regular intervals. Alternatively, the steps of determining the contents of units of the viewable area, prioritizing the availability of the units by content, and allocating one or more display items in the prioritized available units may be repeated when the content changes. 
     According to a second aspect of the present invention there is provided a system for re-arranging a display in a viewable area, comprising: means for dividing the viewable area into units; recognition means for determining the contents of the units of the viewable area; an expert system for prioritizing the availability of the units by content; and means for allocating one or more display items in the prioritized available units. 
     The expert system may use heuristic rules to rate the importance of seeing units of the viewable area. 
     The means for dividing the viewable area may divide the viewable area into a virtual grid with grid units. 
     In one embodiment, the viewable area is a graphical user interface and the units are the minimum size for a graphical icon. The contents of the viewable area may be current graphical user interface displays and the display items may be any one or more of application icons, data icons, toolbars, system preferences and settings, and non-current application interfaces. 
     In another embodiment, the viewable area is a heads up display in a vehicle and the contents of the viewable area is a real time view of the vehicle environment. The display items may be information display items including one or more of control information, direction information, environment information, entertainment information. The recognition means may include means for real time video feed of the viewable area and conversion to computer understood terms. 
     In a further embodiment, the viewable area is a computer game display. 
     According to a third aspect of the present invention there is provided a computer program product stored on a computer readable storage medium, comprising computer readable program code means for re-arranging a display in a viewable area by performing the steps of: dividing the viewable area into units; determining the contents of units of the viewable area; prioritizing the availability of the units by content; and allocating one or more display items in the prioritized available units. 
     Embodiments of the present invention will now be described, by way of examples only, with reference to the accompanying drawings in which: 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a schematic diagram of a viewable area in accordance with the present invention; 
         FIG. 2  is a flow diagram of a method in accordance with the present invention; 
         FIG. 3  is a process diagram of a system in accordance with the present invention; 
         FIGS. 4A and 4B  are schematic diagrams of a GUI in accordance with a first embodiment of the present invention; and 
         FIGS. 5A and 5B  are schematic diagrams of a HUD in accordance with a second embodiment of the present invention. 
     
    
    
     DETAILED DESCRIPTION 
     Referring to  FIG. 1 , a display system  100  is provided in which a viewable area  110  is divided into a virtual grid  120  of grid units  130 . The grid units  130  may each be the size of a minimum display unit. The nature of the data in the viewable area  110  is determined. The data in the viewable area  110  is assigned to one or more grid units  130  by location and prioritized according to the nature of the data. The priorities of the data are user configurable. Grid units containing low priority data are then considered to be available to display other display items  140 . 
     The display items  140  may be information relating to the data in the viewable area or relating to some other task or application. The display items  140  may also be prioritized so that the available grid units display the most important information. The prioritizing of the display items  130  may relate to the nature of the data in the viewable area at any time. 
     Three embodiments of display systems are described as examples; however, the described system may be applied to a wide range of display applications. 
     The first embodiment is a GUI of a computer system in which the viewable area  110  is a computer display such as a desktop or monitor screen. Data in the viewable area  110  is determined by the currently used applications. The display items  130  may be icons for other applications, other non-current windows, system preferences and parameters, etc. 
     The second embodiment is a HUD for use in a vehicle in which information is displayed in the field of view of the driver of the vehicle. The viewable area  110  is the field of view and the data in the viewable area  110  is the view seen by the driver of the road and surrounding objects. The display items  130  which are displayed in the HUD superimposed on the driver&#39;s field of view may be driving control parameters, direction information, etc. 
     The third embodiment is a game system in which the viewable area  110  is the game display and the data in the viewable area is the scene of the game. The display items may be in the form of control parameters, information regarding the score, the characters, etc. 
     All three embodiments the system can be broken into the same processing steps, as follows: 
     1. Identify the data in the viewable area in a form the computer understands; 
     2. Use an expert system with heuristic rules relevant to the application to rate:
         a. the importance of seeing certain parts of the viewable area, and   b. the display items that should be displayed;       

     3. Place as many of the available display items as there is space for; 
     4. Repeat at a suitable refresh rate for the system or when the data in the viewable area changes. 
     Referring to  FIG. 2 , the method or process of the display system is shown in the form of a flow diagram  200 . In the first step  210 , a grid is imposed on the viewable area. Objects are identified in the viewable area  220  and assigned grid units  230 . The grid units are then prioritized by content  240 . In a parallel process, display items are prioritized  250  with display preferences  260 . The display items may be dependent on the objects in the viewable area. As many display items as possible are allocated to positions in the grid  270 . The display items are refreshed after a period of time or when the objects in the viewable area change  280 . The process then loops back to again identify objects in the viewable area  220 . 
     Referring to  FIG. 3 , a process diagram  300  illustrates the flow of control and information/data repositories. 
     The process diagram  300  shows system entities as rectangular boxes through which the flow of control passes. The boxes show a recognition engine  310  which recognizes the content of the viewable area, an expert system  320  which is rule based logic processing, for example, which can be done in languages such as LISP, and a display algorithm  330  for determining the display items to be displayed. 
     The rounded boxes represent data, including the input world view (the content of the viewable area)  340  and the output world view with placed display items  350 . The data also includes, the rule set  360 , the list of display items  370  and the grid  380 . 
     The current world view  340  is processed by the recognition engine  310  to determine the nature of the content of the world view  340 . A grid  380  is also applied to the world view by the recognition engine  310  in order to determine the location of the content. An expert system  320  applies a rule set  360  to the content of the world view provided by the recognition engine  310  and determines the priority of grid locations. A display algorithm  330  allocates display items from the list  370  and outputs a display  350  of the world view with display items. 
     Each of the embodiments will now be described in detail. 
     In the first embodiment, the viewable area is a computer GUI display.  FIG. 4A  shows a computer screen  401  with a GUI  402  in the form of a Windows (trade mark of Microsoft Corporation) desktop display. A general depiction of a desktop  409  is shown with a toolbar  403  at the bottom of the screen including a “start” button  404 . Icons  405  representing applications and data items are displayed as well as windows  406 ,  407 ,  408  of active applications. The windows  406 ,  407 ,  408  may be overlayed with the current window  406  in the forefront. 
     The grid units allocated to the viewable area may be as small as a single pixel of the display with each item inherently taking up a block of grid units, or, for performance, a grid unit may be as large as the smallest element for display. For example, a grid unit could be the size of a task button, such as the “start” button  404  in Windows, or the “hat” button in RedHat Linux (trade marks of Red Hat, Inc. and Linux Online, Inc.). 
     Control buttons such as the “start” button or “hat” button are important because they provide a path to launching applications. Traditionally, important task buttons lie in a fixed position always taking up a specific place, which is configurable but fixed. Typically, such buttons form part of a fixed location task bar, with the only option being which edge of the screen, and whether it hides when a pointer such as a mouse is not hovering over its location. 
     In the described system, such important task buttons could simply be set as a high priority display item, with links to other icons normally found on the task bar, but with no other determination as to its location or arrangement. By default it could occupy the bottom of the screen. However, when re-sizing the active window, perhaps to better view an A 4 document, the user could resize to the full height of the screen, while the buttons relocate to some other free space. 
     Having determined the grid positions, the display is prioritized based on relevant information. In the case of a Windows type system, the current active window (and possibly some of the previously active windows) form the critical, high priority, space, which the user must be able to see unobstructed. The grid units in which these objects are located are marked as being unavailable. The remaining grid units then are divided among the other active objects to be displayed. 
     The display items are then allocated to grid locations with low priority content. Starting with the highest priority display item, along with the preferences for that item as to its location and any associated display items, the display items are allocated positions in the available units of the grid. For example, a display item may have a position preference of top left in the grid, with display items x,y,z to its left/right/top. The user may wish a standard set of quick launch icons to be joined to the main task launch button such that their display is determined with the first. 
     In this way the grid units can be found that best match the preference profile of a display item to display that item, along with any others it specifies. The process is then repeated with the remaining open grid units and the remaining display items to be displayed, until one or other is an empty list. 
     This is then repeated every time the user moves/re-sizes elements of his desktop. Where multiple desktops are used, this technology can simply allocate them as differing grid sets with their own priorities. So, lesser-used windows/displays may be moved to lower and lower priority virtual desktops. 
     In  FIG. 4B , the above embodiment is illustrated. The GUI  402  is shown in which the current window  406  has been enlarged to fill a high proportion of the desktop  409 . The area of the current window  406  is a high priority content area in which no display items can be placed. The remaining area  410  above and to the left of the current window  406  is low priority content and available for display. The top priority display items are the toolbar  403 , and one or more of the icons  405 . These are allocated display areas in the low priority content area  410  and move accordingly. The new position of the toolbar  403 ′ is to the left of the current window  406  and the icons  405 ′ move to above the current window  406 . 
     The second embodiment is an augmented reality display in which the viewable area is the display area in a HUD in a vehicle. Rather than direct motions of the user determining the priorities of the viewable area, the environment outside needs to be intelligently processed to determine the excluded areas for display items. Image recognition is required to identify the content of the view of the driver. 
     Vision enhancement systems which are known for use in cars use a system that determines the path of the road, and refocuses headlights to allow maximum illumination in the relevant areas. This kind of system has technology that takes a real time video feed and breaks down the parts of the image into useful computer understood terms. This form of system may be used by the expert system to interpret the content of viewable area. 
     The expert system may use more obvious circumstantial information. For example, moving in a straight line at a steady speed is likely to mean more things can be displayed (radio information, fuel consumption etc); however, erratic speed and change of direction might indicate situations requiring more concentration and as such displayed information is kept to a minimum, or stopped all together. 
       FIGS. 5A and 5B  are simplified diagrams illustrating the conceptual view for a car HUD  500 . The viewable area  501  is divided into a virtual grid  502  of grid units  503 . The objects within the viewable area  501  are identified by a recognition engine. For example, the objects include the road  505 , the pavement  506 , the sky  507 , grass  508  and trees  509 . 
     The expert system identifies grid units  503  which are critical and should be left clear. In this example, this includes any units which contain road  505  or pavement  506  and any units adjacent the road  505  at important focal points, such as the sky  507  above the road. These critical units are shown with shading. The white units are available for display items as they do not contain objects of importance. 
     In  FIG. 5A , there are two areas  510 ,  511  of white units which are available for display items. The larger area  510  shows display items  512 ,  513  relating to driving control information and the smaller area  511  shows a display item  514  relating to entertainment settings. 
     In  FIG. 5B , the car is rounding a bend in the road and therefore, there is a single area  515  for display items. The display items  512 ,  513  relating to driving control information move to the single display area  515  and the display item  514  relating to entertainment settings disappears. This shows how display items can change and move when it becomes important to clear parts of the view from the clutter of information. 
     Of course, the system can have a great deal more subtlety than illustrated breaking down into grades of importance to see the objects in the viewable area, against grades of importance to see the available display items. 
     In the third embodiment, the viewable area is a visual display of a computer game. This is similar to the HUD embodiment for a vehicle with the simplification that a rendering engine should be able to determine what is being rendered and rate its importance. This can be fed into the HUD display algorithm, which then uses the non-important squares to display its elements as described above. 
     Below is a description, assisted by some logic statements/pseudo code, of the generic implementation concept for this system. 
     This description focuses on the second embodiment on the case of a car HUD system, since the real world nature exposes the most complex issues of the three embodiments. 
     In this case the computer has a video stream which is fed to a recognition application (to determine what is road, sky, car, other etc.). The output of this image recognition is a grid, considered as a 2D collection of boxes which have a size, a location in the grid, and something to indicate the most relevant thing in the image at this location. 
     For example, in the case of a view of the road, grid units that are mostly over road will have a property set to ROAD, other examples might be TREE, GRASS, SKY, BUILDING, CAR these are all thing that the image recognition software would be able to recognize and classify in terms to be understood by the next step. 
     In the first embodiment of this system on a computer operating system, or the third embodiment of a game HUD, the software running the system “knows” what the objects being displayed are. 
     An individual grid unit referenced as grid (x,y) has properties:
         TOPLEFT.X   TOPLEFT.Y   BOTTOMRIGHT.X   BOTTOMRIGHT.Y   WIDTH   HEIGHT   Content (ROAD/TREE/BUILDING/etc)—For the heuristic logic to reference.   CurrentlyOccupied?—Set when something is displayed in this grid already.   int CRITICAL—To be set based on the output of the heuristic logic, i.e. how important it is that this grid be unobscured by information.       

     An artificial intelligence engine can use an expert systems type heuristic approach to what is critical. (LISP, PROLOG) So,
         ROAD=critical level 1   n grid squares above horizon=critical level 1   more than n grid squares above horizon (e.g. the body of the sky)=critical level 3   etc.
 
The grid can be represented as a picture of letters, where letters represent content. The following is a crude example where S=Sky, T=Tree, G=GRASS, R=ROAD.
       

     SSSSSSSSS 
     SSSSSSSSS 
     STTSRRTST 
     TTTGRRTGG 
     GTGRRRGGG 
     GGRRRRRGG 
     The advantage of this approach is that the road could be analyzed, by removing all but the R&#39;s and being left with a grid empty except a representation of the road shape. This can be compared to a selection of stored images of road shapes using basic image comparison techniques which are basically compression techniques. As such the stored shapes can be stored in compressed form, and the compressed version of the current display compared to them to find the best match. Each stored road type can then have its associated rules as to what parts of the viewable area are more important to remain uncluttered. This approach can work for many kinds of situations where you simply reduce the display down to basic types and compare to a store of similar images. 
     Any item between the road near the car and the road distant from the car is critical. Anything that is identified as a signboard, which should be easy to detect being flat reflective surfaces with writing on, is critical. Any area within x threshold of a critical area is a boarder area. 
     Other heuristics can also be encoded to, determine the level of information displayed. For instance, using sensors in a car to indicate speed/turn of the wheel, gear etc. A log of the last few minutes of activity of the sensors can enable a picture to be built up of whether the driver&#39;s full attention is required on the road, or if it is safe to bring in informational displays items. 
     For example,
         If speed=0 and hand-brake engaged then display info level=max.   If speed constant over last 20 seconds, and turning within minimum threshold then display info=all driving-related.   If speed not constant for last 60 seconds and turning above minimum threshold then display info=level 2.   If acceleration ±5 mph/s then display info=level 1.   If indicators activated then display level=min.   etc.       

     These information levels can then be used by the second pass of the grid which decides what moveable/configurable data is allowed to be placed and places it based on specified preferences. 
     The rule set can be changed for different applications. The basic functionality and layout of this system apply to at least the three embodiments described, and in the same way to each. A real world example clearly has more work in identifying relevant pieces of the image, and the applied rule set will change based on the application. However, the method and most of the processing remains the same. 
     The user&#39;s view is considered in two main sets. There are the informational display items and the world view. In the case of an operating system, the world view is all the application windows, and the informational display items are things such as the clock, task bar, “start” button, icons, etc. In the case of a game HUD, the world view is a 3D rendered environment onto which useful data is displayed, such as ammo/health/map/compass/messages from other players. And, of course, in the case of a car system the world view is literally that, and the informational display items could be anything such as: 
     speed; 
     gear; 
     acceleration; 
     distance to car in front; 
     stereo displays (radio station, cd track number/title/song/playing time, etc.); 
     traffic information; and 
     directions. 
     All of these can be ranked in importance both by the user and by legal requirements. 
     Having now got a grid overlay for the world view with grades of importance to the user, the informational display items can be placed appropriately. 
     First, a list is generated of what is to be displayed. This is from a global list of what is available, in which the items are configurable in importance either before hand or dynamically to suit the situation. The expert system&#39;s analysis will provide an information level to be accepted, but can also adjust the importance of specific information for the current situation. So when accelerating a speed gauge is more important than when cruising. When landing a plane in a game (or in reality) altitude/course etc. might be more important than ammo count/weapon selection. This expert system can also dynamically adjust the display preferences for the items, either to specific locations or to linked information. 
     All display items that are deemed not important enough to display at the current time are removed. From the output of the heuristic rules comes a display level to be accepted. The remaining are ordered by importance. 
     Display items must be given properties that indicate their size in relation to the size of a single grid unit. Placing an item in a non-critical grid unit must not cause overlap into a critical grid unit. Hence, bigger grid units make processing easier, but reduce granularity of placement. 
     The dispItem (display item) properties can be:
         WIDTH;   HEIGHT;   dispLevel;   itemList—list of one or more displayable items that are considered a logical display unit.   GRID(x,y) ? 2D array of grid objects.   DispItem(n) ? ordered list of things to display, the “DispItem” might be a single piece of information or a group of linked pieces as determined by the expert system.   len=length of DispItem list.       

     
       
         
               
             
           
               
                   
               
             
             
               
                 DO 
               
               
                 if (Grid(x,y).WIDTH*i / DispItem(n).Width &gt; 1) 
               
               
                 { 
               
               
                 # item is narrower than i grid squares 
               
               
                 if (Grid(x,y).HEIGHT*n / DispItem(num).HEIGHT &gt; 1) 
               
               
                 { 
               
               
                 display item will fit in the height of n grid squares. 
               
               
                 break 
               
               
                 }else{ 
               
               
                 n=n+1 
               
               
                 } 
               
               
                 }else{ 
               
               
                 i=i+1 
               
               
                 } 
               
               
                 LOOP 
               
               
                   
               
             
          
         
       
         
         
           
             # established the number of grid square together required for display of this item. 
             # now need to find a set of that many that are of a lower importance than this display. 
             # 
             # it is assumed that no displayable piece of information requires more grid squares than there are on the screen to display. 
             # minimize processing first consider the stated preference for display location case DispItem(num).DisplayPref
           TOPRIGHT: start from top right grid square, counting left to the middle to find i consecutive grid squares. If none, then drop one row and try again, continuing until halfway down display. When the first set is found, check for n grid squares down. If all grid squares are less important than DispItem(num) then display and mark those grid squares as occupied. Else continue scanning for appropriate area. If nothing appropriate in this quadrant, move to the next (user could specify order for trying, e.g. if it will not go top left, try top right next . . . ).   TOPLEFT: as above but starting top left and working right and down.   BOTTOMRIGHT: as above but from bottom right working left and up.   BOTTOMLEFT: as above but from bottom left working right and up.   
         
             if DispItem(num). displayed !=true then 
             {
           #loop through the remaining display items and remove those which will obviously also not fit for iterator 0→Ien   if dispItem(iterator).WIDTH&gt;=dispItem(num)WIDTH &amp;&amp; dispItem(iterator.HEIGHT)&gt;=dispItem(num).HEIGHT &amp;&amp; dispItem(iterator).dispLevel&lt;=dispItem(num).dispLevel   num=num−1//since the item was not displayed and was removed from the list, deduct the iterator so any item that now occupied the same number in the list are not missed   
         
             } 
             if dispItem(num). displayed then num++ 
             if dispItem.size&gt;num then loop to start //if there are still items in list beyond the last processed item then loop to beginning with next DgispItem. 
           
         
       
    
     The end result will be to have displayed all items that there was currently space for, in order of importance. This may mean that two lower importance items are displayed while a larger more important item is not, but only because there was not room for the larger item. 
     Of course, all this is the first pass, but most of the time items will be displayed currently. The job is to work out if they are to move. This is done by comparing the grid location for display from the above logic, to the current displayed location. If it is different then the item can be moved, either directly, or through some animated translation of the displayed item through the space in-between. 
     Obviously, it is not acceptable to have items jumping all over the place continuously, so the rate at which the display is reviewed can be adjusted to suit the purpose. It would be simple to decide that an item will only actually move if its currently displayed location has become critical to keep clear, or after a certain time after its prime location becomes clear. 
     In the case of a Windows operating system, the need to go through this loop will only occur relatively infrequently when the user causes the displayed “world view” to change. In games and in the real world the world view changes much more rapidly. 
     This same process can be used to make sure relevant information displays are displayed next to each other at the right times. Studies have shown that pilots are better at keeping on top of multiple tasks, e.g. maintaining altitude and correct path (specifically fighter pilots), where those informational displays are close to each other. This is because the brain has a harder time concentrating on both if they are at different places in their field of view. By using the technique above to chose what information pairings are most useful at this time, rather than having to have one layout, the most important info for the situation can be displayed in the best possible position. 
     The present invention is typically implemented as a computer program product, comprising a set of program instructions for controlling a computer or similar device. These instructions can be supplied preloaded into a system or recorded on a storage medium such as a CD-ROM, or made available for downloading over a network such as the Internet or a mobile telephone network. 
     Improvements and modifications can be made to the foregoing without departing from the scope of the present invention.
A method and system are described for re-arranging a display in a viewable area. The method comprises dividing the viewable area into units; determining the contents of units of the viewable area; prioritizing the availability of the units by content; and allocating one or more display items in the prioritized available units. A plurality of display items is provided and the display items are allocated according to a determined order which may depend on one or more of a user preference, the contents of the viewable area, the activity of the user, and environmental parameters.