@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
	{
		Object result = null;

		// Clear the results from the previous invocation.
		results.clear();

		// For each listener currently in this notifier...
		for (T listener : this)
		{
			// Catch errors thrown by listeners
			try
			{
				// Invoke listener
				result = method.invoke(listener, args);

				// If an actual result was returned, append to results.
				if (result != null) {
					results.add(result);
				}
			}
			catch (Throwable t)
			{
				// Print out all exceptions to stdout.
				t.printStackTrace();
			}
		}
		// Return the last result.
		return result;
	}