diff --git a/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/MGuiRMI.java b/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/MGuiRMI.java
index 2b3a7f155cabd883d05556e72ab00af19fe87b40..83be002d3b2e10e1caad69182c4ed698722d9cf9 100644
--- a/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/MGuiRMI.java
+++ b/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/MGuiRMI.java
@@ -31,282 +31,402 @@ import javax.swing.event.ChangeListener;
 
 class MyJLabel extends JLabel {
 
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -7750935382747799343L;
-
-	int boxULx, boxULy, boxW, boxH;
-
-	MyJLabel() {
-		super();
-	}
-
-	MyJLabel(String s) {
-		super(s);
-	}
-
-	void setBox(int boxULx, int boxULy, int boxW, int boxH) {
-		this.boxULx = boxULx;
-		this.boxULy = boxULy;
-		this.boxW = boxW;
-		this.boxH = boxH;
-	}
-
-	@Override
-	protected void paintComponent(Graphics g) {
-		super.paintComponent(g);
-		g.setColor(Color.black);
-		g.drawRect(this.boxULx, this.boxULy, this.boxW, this.boxH);
-	}
+  /**
+   *
+   */
+  private static final long serialVersionUID = -7750935382747799343L;
+
+  int boxULx, boxULy, boxW, boxH;
+
+  MyJLabel() {
+    super();
+  }
+
+  MyJLabel(String s) {
+    super(s);
+  }
+
+  void setBox(int boxULx, int boxULy, int boxW, int boxH) {
+    this.boxULx = boxULx;
+    this.boxULy = boxULy;
+    this.boxW = boxW;
+    this.boxH = boxH;
+  }
+
+  @Override
+  protected void paintComponent(Graphics g) {
+    super.paintComponent(g);
+    g.setColor(Color.black);
+    g.drawRect(this.boxULx, this.boxULy, this.boxW, this.boxH);
+  }
 
 }
 
-public class MGuiRMI implements ActionListener, ChangeListener, MouseListener, MouseMotionListener {
-
-	// GUI elements
-	JFrame frame;
-	JPanel panel;
-	JButton endButton;
-	JButton backButton;
-	JButton calcButton;
-	JTextField hostTextField;
-	JSlider maxIterations;
+class RMIMandelbrotCalculationThread extends Thread {
 	MyJLabel view;
-	JLabel message;
-	int nrIterations;
-
-	// box management
-	int boxULx, boxULy, boxW, boxH;
-	boolean dragging = false;
-
-	// this one does all the calculating work
 	RMIMandelbrotCalculationsInterface remoteCalcObj;
-
-	// how many points in the image?
-	// change if you want a higher resolution
+	int boxULx, boxULy, boxW, boxH;
 	public static int RESX = 600;
 	public static int RESY = 600;
-
-	MGuiRMI() {
-		// set up GUI
-		this.frame = new JFrame("Mandelbrotmenge");
-		this.panel = new JPanel();
-		this.endButton = new JButton("Ende");
-		this.panel.add(this.endButton);
-		this.backButton = new JButton("Zur�ck");
-		this.panel.add(this.backButton);
-		this.calcButton = new JButton("Rechnen");
-		this.hostTextField = new JTextField(20);
-		this.hostTextField.setText("localhost");
-		this.panel.add(this.calcButton);
-		this.panel.add(this.hostTextField);
-		this.frame.add(this.panel);
-		this.frame.setSize(700, 720);
-		this.frame.setVisible(true);
-		this.view = new MyJLabel();
-		this.maxIterations = new JSlider(0, 50, 30);
-		this.panel.add(this.maxIterations);
-		this.panel.add(this.view);
-		this.message = new JLabel("Status");
-		this.message.setBorder(new BevelBorder(BevelBorder.LOWERED));
-		this.frame.add(this.message,BorderLayout.SOUTH);
-
-		this.endButton.addActionListener(this);
-		this.backButton.addActionListener(this);
-		this.calcButton.addActionListener(this);
-		this.maxIterations.addChangeListener(this);
-
-		this.maxIterations.setMajorTickSpacing(10);
-		this.maxIterations.setPaintTicks(true);
-		this.maxIterations.setPaintLabels(true);
-
-		this.view.addMouseListener(this);
-		this.view.addMouseMotionListener(this);
-
-		this.boxULx = 0;
-		this.boxULy = 0;
-		this.boxW = MGuiRMI.RESX;
-		this.boxH = MGuiRMI.RESY;
-		
-		this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
-		// Non-Gui stuff
-		this.nrIterations = 1000;
-	}
-
-	// visualization related stuff, do not touch!
-	int[] generateLookupTable(int nrHues) {
-		int[] tmp = new int[nrHues + 1];
-		int cycle = 2048;
-		for (int i = 0; i < nrHues; i++) {
-			float hue = 1 * ((float) (i % cycle)) / cycle/* ((float)nrHues) */ ;
-			tmp[i] = Color.HSBtoRGB(hue, 0.8f, 1.0f);
-		}
-		tmp[0] = Color.HSBtoRGB(0f, 1.0f, 0.0f);
-		return tmp;
-	}
-
-	// visualization
-	static void applyLookupTable(int[] data, int[] dest, int[] lookupTable) {
-		for (int i = 0; i < data.length; i++) {
-			dest[i] = lookupTable[data[i]];
-		}
-	}
-
-	// here we check what the buttons do
-	public void actionPerformed(ActionEvent ae) {
-		if (ae.getSource() == this.endButton) {
-			System.out.println("Ende");
-			System.exit(0);
-		} else
-
-		if (ae.getSource() == this.backButton) {
-			System.out.println("Zurueck");
-			// Zoom und Ausschnitt zur�cksetzen
-			double ULx = -0.16099999999999995;
-			double ULy = -0.9365333333333333;
-			double LRx = -0.03533333333333327;
-			double LRy = -0.8108666666666666;
-			this.boxULx = 0;
-			this.boxULy = 0;
-			this.boxW = MGuiRMI.RESX;
-			this.boxH = MGuiRMI.RESY;
-			this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
-			this.view.repaint();
-			if (this.remoteCalcObj == null)
+	Boolean upperPart;
+	int maxIterations;
+
+	RMIMandelbrotCalculationThread(Boolean upperPart, MyJLabel view, RMIMandelbrotCalculationsInterface remoteCalcObj, int maxIterations) {
+        this.view = view;
+        this.remoteCalcObj = remoteCalcObj;
+        this.upperPart = upperPart;
+        this.maxIterations = maxIterations;
+    }
+	
+	  // visualization related stuff, do not touch!
+	  int[] generateLookupTable(int nrHues) {
+	    int[] tmp = new int[nrHues + 1];
+	    int cycle = 2048;
+	    for (int i = 0; i < nrHues; i++) {
+	      float hue = 1 * ((float) (i % cycle)) / cycle/* ((float)nrHues) */ ;
+	      tmp[i] = Color.HSBtoRGB(hue, 0.8f, 1.0f);
+	    }
+	    tmp[0] = Color.HSBtoRGB(0f, 1.0f, 0.0f);
+	    return tmp;
+	  }
+
+    public void run() {
+        try {
+            long timestampStart = System.currentTimeMillis();
+        	
+        	double ULx = this.remoteCalcObj.getULx();
+			double ULy = this.remoteCalcObj.getULy();
+			double LRx = this.remoteCalcObj.getLRx();
+			double LRy = this.remoteCalcObj.getLRy();
+			System.out.println("actual="+ULx + "/" + ULy + "/" + LRx + "/" + LRy);
+			double w = LRx - ULx;
+			double h = LRy - ULy;
+			// AG change define box such that it contains only upper half of apple man :-)
+			if (this.upperPart == true)
 			{
-				String message = "Fehler: noch nicht verbunden, noch keine Berechnung durchgef�hrt";
-				this.message.setText(message);
-				System.out.println(message);
+				boxULx = 0 ; boxULy = 0; boxW = MGuiRMI.RESX ; boxH = MGuiRMI.RESY/2;
 			}
 			else
 			{
-				try {
-					this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
-				} catch (RemoteException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-				this.message.setText("Ausschnitt zur�ckgesetzt");
-			}
-		} else
-
-		if (ae.getSource() == this.calcButton) {
-			String hostname = this.hostTextField.getText();
-			System.out.println("Verbinde mit RMI Registry auf Host: " + hostname);
-			try {
-				Registry registry = LocateRegistry.getRegistry(hostname);
-				this.remoteCalcObj = (RMIMandelbrotCalculationsInterface) registry.lookup("RMIMandelbrotCalculationsInterface");
-				System.out.println("Rechnen");
-				long timestampStart = System.currentTimeMillis();
-
-				//this.boxW = this.boxW / 2;
-				//MGuiRMI.RESX = MGuiRMI.RESX / 2;
-				
-				double ULx = 0;
-				double ULy = 0;
-				double LRx = 0;
-				double LRy = 0;
-
-				ULx = this.remoteCalcObj.getULx();
-				ULy = this.remoteCalcObj.getULy();
-				LRx = this.remoteCalcObj.getLRx();
-				LRy = this.remoteCalcObj.getLRy();
-
-				double w = LRx - ULx;
-				double h = LRy - ULy;
-				ULx = ULx + w * this.boxULx / (double) MGuiRMI.RESX;
-				ULy = ULy + h * this.boxULy / (double) MGuiRMI.RESY;
-				w *= this.boxW / (double) (RESX);
-				h *= this.boxH / (double) (RESX);
-				LRx = ULx + w;
-				LRy = ULy + h;
-				System.out.println(ULx + "/" + ULy + "/" + LRx + "/" + LRy);
-				this.boxULx = 0;
-				this.boxULy = 0;
-				this.boxW = MGuiRMI.RESX;
-				this.boxH = MGuiRMI.RESY;
-				int[] colors = null;
-
-				//this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
-				this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
-				this.remoteCalcObj.iterateAllPoints(this.maxIterations.getValue() * 1000, MGuiRMI.RESX, MGuiRMI.RESY);
-				int[] lookupTable = generateLookupTable(this.maxIterations.getValue() * 1000);
-				colors = new int[MGuiRMI.RESX * MGuiRMI.RESY];
-				MGuiRMI.applyLookupTable(remoteCalcObj.getResult(), colors, lookupTable);
-
-				BufferedImage colorImage = new BufferedImage(MGuiRMI.RESX, MGuiRMI.RESY, BufferedImage.TYPE_INT_ARGB);
-				colorImage.setRGB(0, 0, MGuiRMI.RESX, MGuiRMI.RESY, colors, 0, MGuiRMI.RESX);
-				this.view.setIcon(new ImageIcon(colorImage));
-
-				this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
-				this.view.repaint();
-
-				long timestampEnd = System.currentTimeMillis();
-
-				String timeElapsed = "Dauer: " + ((timestampEnd - timestampStart) / 1000.0) + " sec";
-				System.out.println(timeElapsed);
-				this.message.setText(timeElapsed);
-			} catch (RemoteException | NotBoundException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+			    // for lower half:
+			    boxULx = 0 ; boxULy = RESY/2; boxW = RESX ; boxH = RESY/2;
 			}
 
-		}
-	}
-
-	public void mousePressed(MouseEvent e) {
-		this.boxULx = e.getX();
-		this.boxULy = e.getY();
-		this.boxW = 1;
-		this.boxH = 1;
-		this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
-		this.message.setText("boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
-	}
-
-	public void mouseDragged(MouseEvent e) {
-		this.boxW = e.getX() - this.boxULx + 1;
-		this.boxH = e.getY() - this.boxULy + 1;
-		int m = Math.min(boxW, boxH);
-		this.boxW = m;
-		this.boxH = m;
-		this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
-		this.message.setText("boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
-		this.view.repaint();
-	}
-
-	public void mouseReleased(MouseEvent e) {
-
-		if (e.getButton() == MouseEvent.BUTTON1) {
-			this.view.repaint();
-			this.message.setText("Gesetzt: boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
-		}
-	}
 
-	public void mouseMoved(MouseEvent e) {
-	}
+			ULx = ULx + w * this.boxULx / (double) MGuiRMI.RESX;
+			ULy = ULy + h * this.boxULy / (double) MGuiRMI.RESY;
+			w *= this.boxW / (double) (RESX);
+			h *= this.boxH / (double) (RESY);
+			LRx = ULx + w;
+			LRy = ULy + h;
+			System.out.println("computed="+ULx + "/" + ULy + "/" + LRx + "/" + LRy);
+			this.boxULx = 0;
+			this.boxULy = 0;
+			this.boxW = MGuiRMI.RESX;
+			this.boxH = MGuiRMI.RESY;
+			this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
+			// end alex
+			  int[] colors = null;
+
+
+			  this.remoteCalcObj.iterateAllPoints(this.maxIterations * 1000, MGuiRMI.RESX, MGuiRMI.RESY/2);
+
+			  /*
+			  int[] lookupTable = generateLookupTable(this.maxIterations.getValue() * 1000);
+			  colors = new int[MGuiRMI.RESX * MGuiRMI.RESY];
+			  MGuiRMI.applyLookupTable(remoteCalcObj.getResult(), colors, lookupTable);
+
+			  BufferedImage colorImage = new BufferedImage(MGuiRMI.RESX, MGuiRMI.RESY, BufferedImage.TYPE_INT_ARGB);
+			  colorImage.setRGB(0, 0, MGuiRMI.RESX, MGuiRMI.RESY, colors, 0, MGuiRMI.RESX);
+			  this.view.setIcon(new ImageIcon(colorImage));
+
+			  this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
+			  this.view.repaint();
 
-	public void mouseExited(MouseEvent e) {
-	}
+			  long timestampEnd = System.currentTimeMillis();
 
-	public void mouseEntered(MouseEvent e) {
-	}
+			  String timeElapsed = "Dauer: " + ((timestampEnd - timestampStart) / 1000.0) + " sec";
+			  System.out.println(timeElapsed);
+			  this.message.setText(timeElapsed);
+			  * */
 
-	public void mouseClicked(MouseEvent e) {
-	}
+			  int[] lookupTable = generateLookupTable(this.maxIterations * 1000);
+			colors = new int[MGuiRMI.RESX * MGuiRMI.RESY/2];
+			MGuiRMI.applyLookupTable(remoteCalcObj.getResult(), colors, lookupTable);
 
-	// process a new slider value
-	public void stateChanged(ChangeEvent ce) {
-		if (ce.getSource() == this.maxIterations) {
-			// System.out.println("Neuer Wert");
-			this.nrIterations = this.maxIterations.getValue() * 1000;
+			BufferedImage colorImage = new BufferedImage(MGuiRMI.RESX, MGuiRMI.RESY/2, BufferedImage.TYPE_INT_ARGB);
+			colorImage.setRGB(0, 0, MGuiRMI.RESX, MGuiRMI.RESY/2, colors, 0, MGuiRMI.RESX);
+			this.view.setIcon(new ImageIcon(colorImage));
+			
+		      long timestampEnd = System.currentTimeMillis();
+	
+		      String timeElapsed = "Zeit: " + ((timestampEnd - timestampStart) / 1000.0) + " sec";
+		      System.out.println(timeElapsed);
+		      //this.view.setText(timeElapsed);
+
+		} catch (RemoteException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
 		}
-	}
+    }
+}
+
+public class MGuiRMI implements ActionListener, ChangeListener, MouseListener, MouseMotionListener {
 
-	// main, just instantiate an MGui object, gives control to the Gui
-	public static void main(String[] args) {
-		@SuppressWarnings("unused")
-		MGuiRMI gui = new MGuiRMI();
-	}
+  // GUI elements
+  JFrame frame;
+  JPanel panel;
+  JButton endButton;
+  JButton backButton;
+  JButton calcButton;
+  JTextField hostTextField;
+  JSlider maxIterations;
+  MyJLabel viewUpper;
+  MyJLabel viewLower;
+  JLabel message;
+  int nrIterations;
+
+  // box management
+  int boxULx, boxULy, boxW, boxH;
+  boolean dragging = false;
+
+  // this one does all the calculating work
+  RMIMandelbrotCalculationsInterface remoteCalcObj;
+  RMIMandelbrotCalculationsInterface remoteCalcObj2;
+
+  // how many points in the image?
+  // change if you want a higher resolution
+  public static int RESX = 600;
+  public static int RESY = 600;
+
+  MGuiRMI() {
+    // set up GUI
+    this.frame = new JFrame("Mandelbrotmenge");
+    this.panel = new JPanel();
+    this.endButton = new JButton("Ende");
+    this.panel.add(this.endButton);
+    this.backButton = new JButton("Zur�ck");
+    this.panel.add(this.backButton);
+    this.calcButton = new JButton("Rechnen");
+    this.hostTextField = new JTextField(20);
+    this.hostTextField.setText("localhost");
+    this.panel.add(this.calcButton);
+    this.panel.add(this.hostTextField);
+    this.frame.add(this.panel);
+    this.frame.setSize(700, 720);
+    this.frame.setVisible(true);
+    this.viewUpper = new MyJLabel();
+    this.viewLower = new MyJLabel();
+    this.maxIterations = new JSlider(0, 50, 30);
+    this.panel.add(this.maxIterations);
+    this.panel.add(this.viewUpper);
+    this.panel.add(this.viewLower);
+    this.message = new JLabel("Status");
+    this.message.setBorder(new BevelBorder(BevelBorder.LOWERED));
+    this.frame.add(this.message,BorderLayout.SOUTH);
+
+    this.endButton.addActionListener(this);
+    this.backButton.addActionListener(this);
+    this.calcButton.addActionListener(this);
+    this.maxIterations.addChangeListener(this);
+
+    this.maxIterations.setMajorTickSpacing(10);
+    this.maxIterations.setPaintTicks(true);
+    this.maxIterations.setPaintLabels(true);
+
+    this.viewUpper.addMouseListener(this);
+    this.viewUpper.addMouseMotionListener(this);
+    this.viewLower.addMouseListener(this);
+    this.viewLower.addMouseMotionListener(this);
+
+    this.boxULx = 0;
+    this.boxULy = 0;
+    this.boxW = MGuiRMI.RESX;
+    this.boxH = MGuiRMI.RESY;
+
+    this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+    // Non-Gui stuff
+    this.nrIterations = 1000;
+  }
+
+  // visualization
+  static void applyLookupTable(int[] data, int[] dest, int[] lookupTable) {
+    for (int i = 0; i < data.length; i++) {
+      dest[i] = lookupTable[data[i]];
+    }
+  }
+
+  // here we check what the buttons do
+  public void actionPerformed(ActionEvent ae) {
+    if (ae.getSource() == this.endButton) {
+      System.out.println("Ende");
+      System.exit(0);
+    } else
+
+    if (ae.getSource() == this.backButton) {
+      System.out.println("Zurueck");
+      // Zoom und Ausschnitt zur�cksetzen
+
+      double ULx = -2;
+      double ULy = 2;
+      double LRx = 2;
+      double LRy = -2;
+      this.boxULx = 0;
+      this.boxULy = 0;
+      this.boxW = MGuiRMI.RESX;
+      this.boxH = MGuiRMI.RESY;
+      this.viewUpper.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
+      this.viewUpper.repaint();
+      this.viewLower.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
+      this.viewLower.repaint();
+      if (this.remoteCalcObj == null)
+      {
+        String message = "Fehler: noch nicht verbunden, noch keine Berechnung durchgef�hrt";
+        this.message.setText(message);
+        System.out.println(message);
+      }
+      else
+      {
+        try {
+          this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
+        } catch (RemoteException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        }
+        this.message.setText("Ausschnitt zur�ckgesetzt");
+      }
+      if (this.remoteCalcObj2 == null)
+      {
+        String message = "Fehler: noch nicht verbunden, noch keine Berechnung durchgef�hrt";
+        this.message.setText(message);
+        System.out.println(message);
+      }
+      else
+      {
+        try {
+          this.remoteCalcObj2.setView(ULx, ULy, LRx, LRy);
+        } catch (RemoteException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        }
+        this.message.setText("Ausschnitt zur�ckgesetzt");
+      }
+    } else
+
+    if (ae.getSource() == this.calcButton) {
+      String hostname = this.hostTextField.getText();
+      System.out.println("Verbinde mit RMI Registry auf Host: " + hostname);
+      try {
+        Registry registry = LocateRegistry.getRegistry(hostname);
+        this.remoteCalcObj = (RMIMandelbrotCalculationsInterface) registry.lookup("RMIMandelbrotCalculationsInterface");
+        this.remoteCalcObj2 = (RMIMandelbrotCalculationsInterface) registry.lookup("RMIMandelbrotCalculationsInterface2");
+        /** CODE SEBASTIAN
+
+        System.out.println("Rechnen");
+        long timestampStart = System.currentTimeMillis();
+
+        //this.boxW = this.boxW / 2;
+        //MGuiRMI.RESX = MGuiRMI.RESX / 2;
+
+        double ULx = 0;
+        double ULy = 0;
+        double LRx = 0;
+        double LRy = 0;
+
+        ULx = this.remoteCalcObj.getULx();
+        ULy = this.remoteCalcObj.getULy();
+        LRx = this.remoteCalcObj.getLRx();
+        LRy = this.remoteCalcObj.getLRy();
+
+        double w = LRx - ULx;
+        double h = LRy - ULy;
+        ULx = ULx + w * this.boxULx / (double) MGuiRMI.RESX;
+        ULy = ULy + h * this.boxULy / (double) MGuiRMI.RESY;
+        w *= this.boxW / (double) (RESX);
+        h *= this.boxH / (double) (RESX);
+        LRx = ULx + w;
+        LRy = ULy + h;
+        System.out.println(ULx + "/" + ULy + "/" + LRx + "/" + LRy);
+        this.boxULx = 0;
+        this.boxULy = 0;
+        this.boxW = MGuiRMI.RESX;
+        this.boxH = MGuiRMI.RESY;
+        int[] colors = null;
+
+        //this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
+        this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
+
+        end */
+        /* Code Alex */
+      System.out.println("Rechnen");
+
+      RMIMandelbrotCalculationThread rmimct = new RMIMandelbrotCalculationThread(true, this.viewUpper, this.remoteCalcObj, maxIterations.getValue());
+      new Thread(rmimct).start();
+      RMIMandelbrotCalculationThread rmimct2 = new RMIMandelbrotCalculationThread(false, this.viewLower, this.remoteCalcObj2, maxIterations.getValue());
+      new Thread(rmimct2).start();
+      
+      } catch (RemoteException | NotBoundException e) {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+
+    }
+  }
+
+  // Zoom not wirking for lower...
+  
+  public void mousePressed(MouseEvent e) {
+    this.boxULx = e.getX();
+    this.boxULy = e.getY();
+    this.boxW = 1;
+    this.boxH = 1;
+    this.viewUpper.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
+    this.message.setText("boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
+  }
+
+  public void mouseDragged(MouseEvent e) {
+    this.boxW = e.getX() - this.boxULx + 1;
+    this.boxH = e.getY() - this.boxULy + 1;
+    int m = Math.min(boxW, boxH);
+    this.boxW = m;
+    this.boxH = m;
+    this.viewUpper.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
+    this.message.setText("boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
+    this.viewUpper.repaint();
+  }
+
+  public void mouseReleased(MouseEvent e) {
+
+    if (e.getButton() == MouseEvent.BUTTON1) {
+      this.viewUpper.repaint();
+      this.message.setText("Gesetzt: boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
+    }
+  }
+
+  public void mouseMoved(MouseEvent e) {
+  }
+
+  public void mouseExited(MouseEvent e) {
+  }
+
+  public void mouseEntered(MouseEvent e) {
+  }
+
+  public void mouseClicked(MouseEvent e) {
+  }
+
+  // process a new slider value
+  public void stateChanged(ChangeEvent ce) {
+    if (ce.getSource() == this.maxIterations) {
+      // System.out.println("Neuer Wert");
+      this.nrIterations = this.maxIterations.getValue() * 1000;
+    }
+  }
+
+  // main, just instantiate an MGui object, gives control to the Gui
+  public static void main(String[] args) {
+    @SuppressWarnings("unused")
+    MGuiRMI gui = new MGuiRMI();
+  }
 }
diff --git a/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer.java b/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer.java
index ba6b699be967aba3ddd09b894f360c9516ed5f08..9997b42792d78cbb6736ddbd9176de56e54f542f 100644
--- a/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer.java
+++ b/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer.java
@@ -21,53 +21,53 @@ class LoopbackSocketFactory extends RMISocketFactory {
                                .createSocket(host, port);
     }
 }
-*/	
+*/
 
 class Complex {
-	double r;
-	double i;
-
-	Complex() {
-		r = 0.0;
-		i = 0.0;
-	}
-
-	Complex(double r, double i) {
-		this.r = r;
-		this.i = i;
-	}
-
-	void mulBy(Complex other) {
-		double rTmp = this.r * other.r - this.i * other.i;
-		this.i = this.r * other.i + this.i * other.r;
-		this.r = rTmp;
-	}
-
-	void add(Complex other) {
-		this.r += other.r;
-		this.i += other.i;
-	}
-
-	void sub(Complex other) {
-		this.r -= other.r;
-		this.i -= other.i;
-	}
-
-	double absValue() {
-		return Math.sqrt(this.r * this.r + this.i * this.i);
-	}
+  double r;
+  double i;
+
+  Complex() {
+    r = 0.0;
+    i = 0.0;
+  }
+
+  Complex(double r, double i) {
+    this.r = r;
+    this.i = i;
+  }
+
+  void mulBy(Complex other) {
+    double rTmp = this.r * other.r - this.i * other.i;
+    this.i = this.r * other.i + this.i * other.r;
+    this.r = rTmp;
+  }
+
+  void add(Complex other) {
+    this.r += other.r;
+    this.i += other.i;
+  }
+
+  void sub(Complex other) {
+    this.r -= other.r;
+    this.i -= other.i;
+  }
+
+  double absValue() {
+    return Math.sqrt(this.r * this.r + this.i * this.i);
+  }
 }
 
 public class RMIMandelbrotCalculationsServer implements RMIMandelbrotCalculationsInterface {
     public RMIMandelbrotCalculationsServer() {}
-	
+
     public static void main(String args[]) {
 
         try {
-        	//RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());
-        	
-        	RMIMandelbrotCalculationsServer obj = new RMIMandelbrotCalculationsServer();
-        	RMIMandelbrotCalculationsInterface stub = (RMIMandelbrotCalculationsInterface) UnicastRemoteObject.exportObject(obj, 0);
+          //RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());
+
+          RMIMandelbrotCalculationsServer obj = new RMIMandelbrotCalculationsServer();
+          RMIMandelbrotCalculationsInterface stub = (RMIMandelbrotCalculationsInterface) UnicastRemoteObject.exportObject(obj, 0);
 
             // Bind the remote object's stub in the registry
             Registry registry = LocateRegistry.getRegistry();
@@ -79,73 +79,72 @@ public class RMIMandelbrotCalculationsServer implements RMIMandelbrotCalculation
             e.printStackTrace();
         }
     }
-    
-	// hier wird das Ergebnis von iterateAll() gespeichert
-	protected int[] result = null;
-
-	// der augenblicklich gewaehlte Ausschnitt
-	//double ULx = -2, ULy = -2, LRx = 2, LRy = 2;
-	double ULx = -0.16099999999999995, ULy = -0.9365333333333333, LRx = -0.03533333333333327, LRy = -0.8108666666666666;
-
-	int iterateOnePoint(Complex c, int maxIterations, double maxModulus) {
-		Complex z = new Complex(0., 0.);
-
-		for (int i = 0; i < maxIterations; i++) {
-			z.mulBy(z);
-			z.add(c);
-			double m = z.absValue();
-			if (m > maxModulus) {
-				return i;
-			}
-		}
-		return maxIterations;
-	}
-
-	public void iterateAllPoints(int maxIterations, double nrPointsX, double nrPointsY) {
-
-		this.result = new int[(int) (nrPointsX * nrPointsY)];
-
-		int counter = 0;
-		double stepX = (this.LRx - this.ULx) / nrPointsX;
-		double stepY = (this.LRy - this.ULy) / nrPointsY;
-		double i = this.ULy;
-		for (int cy = 0; cy < nrPointsY; cy++) {
-			double r = this.ULx;
-			for (int cx = 0; cx < nrPointsX; cx++) {
-				Complex c = new Complex(r, i);
-				this.result[counter] = maxIterations - this.iterateOnePoint(c, maxIterations, 2.0);
-				counter += 1;
-				r += stepX;
-			}
-			i += stepY;
-		}
-	}
-
-	public int[] getResult() {
-		return this.result;
-	}
-
-	public double getULx() {
-		return this.ULx;
-	}
-
-	public double getLRx() {
-		return this.LRx;
-	}
-
-	public double getULy() {
-		return this.ULy;
-	}
-
-	public double getLRy() {
-		return this.LRy;
-	}
-
-	public void setView(double ULx, double ULy, double LRx, double LRy) {
-		this.ULx = ULx;
-		this.ULy = ULy;
-		this.LRx = LRx;
-		this.LRy = LRy;
-	}
+
+  // hier wird das Ergebnis von iterateAll() gespeichert
+  protected int[] result = null;
+
+  // der augenblicklich gewaehlte Ausschnitt
+  double ULx = -2, ULy = 2, LRx = 2, LRy = -2;
+
+  int iterateOnePoint(Complex c, int maxIterations, double maxModulus) {
+    Complex z = new Complex(0., 0.);
+
+    for (int i = 0; i < maxIterations; i++) {
+      z.mulBy(z);
+      z.add(c);
+      double m = z.absValue();
+      if (m > maxModulus) {
+        return i;
+      }
+    }
+    return maxIterations;
+  }
+
+  public void iterateAllPoints(int maxIterations, double nrPointsX, double nrPointsY) {
+
+    this.result = new int[(int) (nrPointsX * nrPointsY)];
+
+    int counter = 0;
+    double stepX = (this.LRx - this.ULx) / nrPointsX;
+    double stepY = (this.LRy - this.ULy) / nrPointsY;
+    double i = this.ULy;
+    for (int cy = 0; cy < nrPointsY; cy++) {
+      double r = this.ULx;
+      for (int cx = 0; cx < nrPointsX; cx++) {
+        Complex c = new Complex(r, i);
+        this.result[counter] = maxIterations - this.iterateOnePoint(c, maxIterations, 2.0);
+        counter += 1;
+        r += stepX;
+      }
+      i += stepY;
+    }
+  }
+
+  public int[] getResult() {
+    return this.result;
+  }
+
+  public double getULx() {
+    return this.ULx;
+  }
+
+  public double getLRx() {
+    return this.LRx;
+  }
+
+  public double getULy() {
+    return this.ULy;
+  }
+
+  public double getLRy() {
+    return this.LRy;
+  }
+
+  public void setView(double ULx, double ULy, double LRx, double LRy) {
+    this.ULx = ULx;
+    this.ULy = ULy;
+    this.LRx = LRx;
+    this.LRy = LRy;
+  }
 
 }