diff --git a/src/contrib/zooinspector/README.jtoaster b/src/contrib/zooinspector/README.jtoaster
new file mode 100644
index 0000000..fbe128e
--- /dev/null
+++ b/src/contrib/zooinspector/README.jtoaster
@@ -0,0 +1,29 @@
+JToaster is a java utility class to show animated notification windows.
+
+JToaster was created by Daniele Piras and the main site for the project
+is:
+http://sourceforge.net/projects/jtoaster/
+
+JToaster is licensed under Apache License V2 (that is it include in this
+package)
+
+
+Simle example to use JToaster:
+
+package com.nitido.utils.toaster;
+
+public class Example
+{
+
+	/**
+	 * Simple Example...
+	 */
+	public static void main(String[] args)
+	{
+	 // create toaster manager
+     Toaster toasterManager = new Toaster();
+     // show a simple notification message.
+     toasterManager.showToaster( "Hello World!" );
+	}
+
+}
diff --git a/src/contrib/zooinspector/src/java/com/nitido/utils/toaster/Toaster.java b/src/contrib/zooinspector/src/java/com/nitido/utils/toaster/Toaster.java
new file mode 100644
index 0000000..7e14650
--- /dev/null
+++ b/src/contrib/zooinspector/src/java/com/nitido/utils/toaster/Toaster.java
@@ -0,0 +1,525 @@
+/**
+ * Java Toaster is a java utility class for your swing applications
+ * that show an animate box coming from the bottom of your screen
+ * with a notification message and/or an associated image 
+ * (like msn online/offline notifications).
+ * 
+ * Toaster panel in windows system follow the taskbar; So if
+ * the taskbar is into the bottom the panel coming from the bottom
+ * and if the taskbar is on the top then the panel coming from the top.
+ * 
+ * This is a simple example of utilization:
+ * 
+ * import com.nitido.utils.toaster.*; 
+ * import javax.swing.*; 
+ * 
+ * public class ToasterTest 
+ * { 
+ *
+ *  public static void main(String[] args) 
+ *  { 
+ *   // Initialize toaster manager... 
+ *   Toaster toasterManager = new Toaster(); 
+ *
+ *   // Show a simple toaster 
+ *   toasterManager.showToaster( new ImageIcon( "mylogo.gif" ), "A simple toaster with an image" ); 
+ *  } 
+ * } 
+ */
+package com.nitido.utils.toaster;
+
+import java.awt.*;
+
+import javax.swing.*;
+import javax.swing.border.*;
+
+/**
+ * Class to show tosters in multiplatform
+ * 
+ * @author daniele piras
+ * 
+ */
+public class Toaster 
+{
+	// Width of the toster
+	private int toasterWidth = 300;
+
+	// Height of the toster
+	private int toasterHeight = 80;
+
+	// Step for the toaster
+	private int step = 20;
+
+	// Step time
+	private int stepTime = 20;
+
+	// Show time
+	private int displayTime = 3000;
+	
+	// Current number of toaster...
+	private int currentNumberOfToaster = 0;
+	
+	// Last opened toaster
+	private int maxToaster = 0;
+
+	// Max number of toasters for the sceen
+	private int maxToasterInSceen;
+	
+	// Font used to display message
+	private Font font;
+	
+  // Color for border
+	private Color borderColor;
+	
+  // Color for toaster
+	private Color toasterColor;
+	
+  // Set message color
+	private Color messageColor;
+	
+	// Set the margin
+	int margin;
+	
+	// Flag that indicate if use alwaysOnTop or not.
+	// method always on top start only SINCE JDK 5 !
+	boolean useAlwaysOnTop = true;
+	
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor to initialized toaster component...
+	 * 
+	 * @author daniele piras
+	 * 
+	 */
+	public Toaster()
+	{
+		// Set default font...
+		font = new Font("Arial", Font.BOLD, 12);
+		// Border color
+		borderColor = new Color(245, 153, 15);
+		toasterColor = Color.WHITE;
+		messageColor = Color.BLACK;
+		useAlwaysOnTop = true;
+		// Verify AlwaysOnTop Flag...
+		try
+		{
+		  JWindow.class.getMethod( "setAlwaysOnTop", new Class[] { Boolean.class } );
+		}
+		catch( Exception e )
+		{
+			useAlwaysOnTop = false;
+		}
+		
+	}
+	
+	/**
+	 * Class that rappresent a single toaster
+	 * 
+	 * @author daniele piras
+	 * 
+	 */
+	class SingleToaster extends javax.swing.JWindow
+	{
+		private static final long serialVersionUID = 1L;
+
+		// Label to store Icon
+		private JLabel iconLabel = new JLabel();
+
+		// Text area for the message
+		private JTextArea message = new JTextArea();
+		
+
+
+		
+		/***
+		 * Simple costructor that initialized components...
+		 */
+		public SingleToaster()
+		{
+			initComponents();
+		}
+
+		/***
+		 * Function to initialized components
+		 */
+		private void initComponents()
+		{
+			
+			setSize(toasterWidth, toasterHeight);
+			message.setFont( getToasterMessageFont() );
+			JPanel externalPanel = new JPanel(new BorderLayout(1, 1));
+			externalPanel.setBackground( getBorderColor() );
+			JPanel innerPanel = new JPanel(new BorderLayout( getMargin(), getMargin() ));
+			innerPanel.setBackground( getToasterColor() );
+			message.setBackground( getToasterColor() );
+			message.setMargin( new Insets( 2,2,2,2 ) );
+			message.setLineWrap( true );
+			message.setWrapStyleWord( true );
+			
+			EtchedBorder etchedBorder = (EtchedBorder) BorderFactory
+					.createEtchedBorder();
+			externalPanel.setBorder(etchedBorder);
+
+			externalPanel.add(innerPanel);
+      message.setForeground( getMessageColor() );
+			innerPanel.add(iconLabel, BorderLayout.WEST);
+			innerPanel.add(message, BorderLayout.CENTER);
+			getContentPane().add(externalPanel);
+		}
+    
+
+		/***
+		 * Start toaster animation...
+		 */
+		public void animate()
+		{
+			( new Animation( this ) ).start();
+		}
+		
+	}
+
+	/***
+	 * Class that manage the animation
+	 */
+	class Animation extends Thread
+	{
+		SingleToaster toaster;
+		
+		public Animation( SingleToaster toaster )
+		{
+			this.toaster = toaster;
+		}
+		
+		
+		/**
+		 * Animate vertically the toaster. The toaster could be moved from bottom
+		 * to upper or to upper to bottom
+		 * @param posx
+		 * @param fromy
+		 * @param toy
+		 * @throws InterruptedException 
+		 */
+		protected void animateVertically( int posx, int fromY, int toY ) throws InterruptedException
+		{
+			
+			toaster.setLocation( posx, fromY );
+			if ( toY < fromY )
+			{
+				for (int i = fromY; i > toY; i -= step)
+				{
+					toaster.setLocation(posx, i);
+					Thread.sleep(stepTime);
+				}
+			}
+			else
+			{
+				for (int i = fromY; i < toY; i += step)
+				{
+					toaster.setLocation(posx, i);
+					Thread.sleep(stepTime);
+				}
+			}
+			toaster.setLocation( posx, toY );
+		}
+		
+		public void run()
+		{
+			try
+			{
+				boolean animateFromBottom = true;
+				GraphicsEnvironment ge = GraphicsEnvironment
+						.getLocalGraphicsEnvironment();
+				Rectangle screenRect = ge.getMaximumWindowBounds();
+
+				int screenHeight = (int) screenRect.height;
+			
+				int startYPosition;
+				int stopYPosition;
+				
+				if ( screenRect.y > 0 )
+				{
+				  animateFromBottom = false; // Animate from top!
+				}
+
+				maxToasterInSceen = screenHeight / toasterHeight;
+				
+				
+				int posx = (int) screenRect.width - toasterWidth - 1;
+
+				toaster.setLocation(posx, screenHeight);
+				toaster.setVisible(true);
+				if ( useAlwaysOnTop )
+				{
+				  toaster.setAlwaysOnTop(true);
+				}
+				
+				if ( animateFromBottom )
+				{
+					startYPosition = screenHeight;
+					stopYPosition = startYPosition - toasterHeight - 1;
+					if ( currentNumberOfToaster > 0 )
+					{
+						stopYPosition = stopYPosition - ( maxToaster % maxToasterInSceen * toasterHeight );
+					}
+					else
+					{
+						maxToaster = 0;
+					}
+				}
+				else
+				{
+					startYPosition = screenRect.y - toasterHeight;
+					stopYPosition = screenRect.y;
+					
+					if ( currentNumberOfToaster > 0 )
+					{
+						stopYPosition = stopYPosition + ( maxToaster % maxToasterInSceen * toasterHeight );
+					}
+					else
+					{
+						maxToaster = 0;
+					}
+				}
+				
+				currentNumberOfToaster++;
+				maxToaster++;
+				
+				
+				animateVertically( posx, startYPosition, stopYPosition );
+				Thread.sleep(displayTime);
+				animateVertically( posx, stopYPosition, startYPosition );
+				
+				currentNumberOfToaster--;
+				toaster.setVisible(false);
+				toaster.dispose();
+			} catch (Exception e)
+			{
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	
+	
+	/**
+	 * Show a toaster with the specified message and the associated icon.
+	 */
+	public void showToaster(Icon icon, String msg)
+	{
+    SingleToaster singleToaster = new SingleToaster();
+    if ( icon != null )
+    {
+      singleToaster.iconLabel.setIcon( icon );
+    }
+    singleToaster.message.setText( msg );
+		singleToaster.animate();
+	}
+
+	/**
+	 * Show a toaster with the specified message.
+	 */
+	public void showToaster( String msg )
+	{
+		showToaster( null, msg );
+	}
+
+	/**
+	 * @return Returns the font
+	 */
+	public Font getToasterMessageFont()
+	{
+		// TODO Auto-generated method stub
+		return font;
+	}
+
+	/**
+	 * Set the font for the message
+	 */
+	public void setToasterMessageFont( Font f)
+	{
+    font = f;
+	}
+
+		
+	/**
+	 * @return Returns the borderColor.
+	 */
+	public Color getBorderColor()
+	{
+		return borderColor;
+	}
+
+
+
+	/**
+	 * @param borderColor The borderColor to set.
+	 */
+	public void setBorderColor(Color borderColor)
+	{
+		this.borderColor = borderColor;
+	}
+
+
+
+	/**
+	 * @return Returns the displayTime.
+	 */
+	public int getDisplayTime()
+	{
+		return displayTime;
+	}
+
+
+
+	/**
+	 * @param displayTime The displayTime to set.
+	 */
+	public void setDisplayTime(int displayTime)
+	{
+		this.displayTime = displayTime;
+	}
+
+
+
+	/**
+	 * @return Returns the margin.
+	 */
+	public int getMargin()
+	{
+		return margin;
+	}
+
+
+
+	/**
+	 * @param margin The margin to set.
+	 */
+	public void setMargin(int margin)
+	{
+		this.margin = margin;
+	}
+
+
+
+	/**
+	 * @return Returns the messageColor.
+	 */
+	public Color getMessageColor()
+	{
+		return messageColor;
+	}
+
+
+
+	/**
+	 * @param messageColor The messageColor to set.
+	 */
+	public void setMessageColor(Color messageColor)
+	{
+		this.messageColor = messageColor;
+	}
+
+
+
+	/**
+	 * @return Returns the step.
+	 */
+	public int getStep()
+	{
+		return step;
+	}
+
+
+
+	/**
+	 * @param step The step to set.
+	 */
+	public void setStep(int step)
+	{
+		this.step = step;
+	}
+
+
+
+	/**
+	 * @return Returns the stepTime.
+	 */
+	public int getStepTime()
+	{
+		return stepTime;
+	}
+
+
+
+	/**
+	 * @param stepTime The stepTime to set.
+	 */
+	public void setStepTime(int stepTime)
+	{
+		this.stepTime = stepTime;
+	}
+
+
+
+	/**
+	 * @return Returns the toasterColor.
+	 */
+	public Color getToasterColor()
+	{
+		return toasterColor;
+	}
+
+
+
+	/**
+	 * @param toasterColor The toasterColor to set.
+	 */
+	public void setToasterColor(Color toasterColor)
+	{
+		this.toasterColor = toasterColor;
+	}
+
+
+
+	/**
+	 * @return Returns the toasterHeight.
+	 */
+	public int getToasterHeight()
+	{
+		return toasterHeight;
+	}
+
+
+
+	/**
+	 * @param toasterHeight The toasterHeight to set.
+	 */
+	public void setToasterHeight(int toasterHeight)
+	{
+		this.toasterHeight = toasterHeight;
+	}
+
+
+
+	/**
+	 * @return Returns the toasterWidth.
+	 */
+	public int getToasterWidth()
+	{
+		return toasterWidth;
+	}
+
+
+
+	/**
+	 * @param toasterWidth The toasterWidth to set.
+	 */
+	public void setToasterWidth(int toasterWidth)
+	{
+		this.toasterWidth = toasterWidth;
+	}
+
+
+
+}
