diff --git a/JavaAkkaFuCoin/.classpath b/JavaAkkaFuCoin/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..149cb3c90688952162d8c347ea8ee4ac2a23e17b
--- /dev/null
+++ b/JavaAkkaFuCoin/.classpath
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/JavaAkkaFuCoin/.gitignore b/JavaAkkaFuCoin/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..09e3bc9b241c477ea341af9ee029becad0c2148c
--- /dev/null
+++ b/JavaAkkaFuCoin/.gitignore
@@ -0,0 +1,2 @@
+/bin/
+/target/
diff --git a/JavaAkkaFuCoin/.project b/JavaAkkaFuCoin/.project
new file mode 100644
index 0000000000000000000000000000000000000000..4610a714e9294dc1ec3988a67610511640c5c0c7
--- /dev/null
+++ b/JavaAkkaFuCoin/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>JavaAkkaFuCoin</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/JavaAkkaFuCoin/.settings/org.eclipse.jdt.core.prefs b/JavaAkkaFuCoin/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..672496e107ed4e070613aad776b4df5146306bd4
--- /dev/null
+++ b/JavaAkkaFuCoin/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/JavaAkkaFuCoin/.settings/org.eclipse.m2e.core.prefs b/JavaAkkaFuCoin/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/JavaAkkaFuCoin/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/JavaAkkaFuCoin/pom.xml b/JavaAkkaFuCoin/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ccdd40ba7e08a14b15f3b932107be1e45b380f39
--- /dev/null
+++ b/JavaAkkaFuCoin/pom.xml
@@ -0,0 +1,26 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>JavaAkkaFuCoin</groupId>
+  <artifactId>JavaAkkaFuCoin</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <build>
+    <sourceDirectory>src</sourceDirectory>
+    <plugins>
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.1</version>
+        <configuration>
+          <source>1.8</source>
+          <target>1.8</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+  	<dependency>
+  		<groupId>com.typesafe.akka</groupId>
+  		<artifactId>akka-actor_2.11</artifactId>
+  		<version>2.4-M1</version>
+  	</dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/JavaAkkaFuCoin/src/akkateststuff/Main.java b/JavaAkkaFuCoin/src/akkateststuff/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a07272a1098f4c092ec0a69d5b8382684d8585ea
--- /dev/null
+++ b/JavaAkkaFuCoin/src/akkateststuff/Main.java
@@ -0,0 +1,11 @@
+package akkateststuff;
+import akka.actor.*;
+
+public class Main {
+public static void main(String[] args) {
+	final ActorSystem system = ActorSystem.create("MySystem");
+	final ActorRef myActor42 = system.actorOf(Node.props(42),"42");
+	final ActorRef myActor43 = system.actorOf(Node.props(43),"43");
+	myActor42.tell("test", myActor43);
+}
+}
diff --git a/JavaAkkaFuCoin/src/akkateststuff/MyNodeCreator.java b/JavaAkkaFuCoin/src/akkateststuff/MyNodeCreator.java
new file mode 100644
index 0000000000000000000000000000000000000000..c20b97fdb1dd0c17add6a241f8634e1b39c0fe41
--- /dev/null
+++ b/JavaAkkaFuCoin/src/akkateststuff/MyNodeCreator.java
@@ -0,0 +1,18 @@
+package akkateststuff;
+import akka.japi.Creator;
+
+
+public class MyNodeCreator implements Creator<Node>{
+	private static final long serialVersionUID = 1L;
+	private int magicNumber;
+	
+	public MyNodeCreator(int magicNumber) {
+		this.magicNumber=magicNumber;
+	}
+
+	@Override
+	public Node create() throws Exception {
+		return new Node(magicNumber);
+	}
+
+}
diff --git a/JavaAkkaFuCoin/src/akkateststuff/Node.java b/JavaAkkaFuCoin/src/akkateststuff/Node.java
new file mode 100644
index 0000000000000000000000000000000000000000..730d92b28fd2bb3a17cf65540615999eb8d78f2b
--- /dev/null
+++ b/JavaAkkaFuCoin/src/akkateststuff/Node.java
@@ -0,0 +1,23 @@
+package akkateststuff;
+import akka.actor.*;
+import akka.japi.Creator;
+
+public class Node extends UntypedActor {
+
+	private int magicnumber;
+
+	public Node(int magicnumber) {
+		this.magicnumber = magicnumber;
+	}
+
+	@Override
+	public void onReceive(Object arg0) throws Exception {
+		System.out.println(magicnumber+" said \""+arg0+"\" to me");
+	}
+	public static int magicNumber=0;
+	
+	public static Props props(final int magicNumber) {
+		Node.magicNumber=magicNumber;
+		return Props.create(new MyNodeCreator(magicNumber));
+	}
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/IWallet.java b/JavaAkkaFuCoin/src/fucoin/IWallet.java
new file mode 100644
index 0000000000000000000000000000000000000000..f1d96a10c113b8a1de4bc27dbc0da472de3ca246
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/IWallet.java
@@ -0,0 +1,13 @@
+package fucoin;
+import java.util.Vector;
+
+import fucoin.gui.IWalletControle;
+
+
+public interface IWallet extends IWalletControle{
+	Vector<WalletPointer> join();
+	void storeOrUpdate(Wallet w);
+	void invalidateWallet(Wallet w);
+	void receiveTransaction(int amount);
+	Vector<WalletPointer> searchWallet(String adress);
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/Main.java b/JavaAkkaFuCoin/src/fucoin/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ac9d2621f7a41ac0aa3e70f1bf7e47348576bfb
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/Main.java
@@ -0,0 +1,79 @@
+package fucoin;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.time.Duration;
+import java.util.concurrent.Executors;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JTextField;
+
+import fucoin.actions.JoinActionRespond;
+import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
+import akka.dispatch.Dispatcher;
+import akka.dispatch.ExecutorServiceFactoryProvider;
+import akka.dispatch.MessageDispatcherConfigurator;
+import akkateststuff.Node;
+
+
+public class Main {
+	private static Main singleton;
+	public static Main getSingleton() {
+		return singleton;
+	}
+	
+	public final ActorSystem system;
+	
+	public ActorSystem getSystem() {
+		return system;
+	}
+	
+	public Main() {
+		this.singleton=this;
+		system = ActorSystem.create("MySystem");
+		system.actorOf(Wallet.props(null,"Main"),"main");
+		
+	}
+	public void start(){
+		//43 tells 42 join
+	}
+	static int walletCounter = 0;
+	public static void main(String[] args) {
+		Main main = new Main();
+		main.start();
+		JFrame frame = new JFrame("Manager");
+		frame.setLayout(new GridLayout(3,2));
+		frame.add(new JLabel("Connect to:"));
+		JTextField input = new JTextField("akka://MySystem/user/main");
+		frame.add(input);
+		frame.add(new JLabel("Name:"));
+		JTextField name = new JTextField(""+walletCounter);
+		frame.add(name);
+		JButton button = new JButton("connect");
+		button.addActionListener(new ActionListener() {
+			
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				/*MessageDispatcherConfigurator mc = null;
+				String id = input.getText()+"-dispatched";
+				int hroughput = 1;
+				Duration d = Duration.ofSeconds(2);
+				
+				
+				Dispatcher d = new Dispatcher(mc,id, 1, d, Executors.newSingleThreadExecutor(),1000);*/
+				getSingleton().getSystem().actorOf(Wallet.props(input.getText(),name.getText()),name.getText());
+			}
+		});
+		
+		frame.add(button);
+		frame.setSize(300, 300);
+		frame.setVisible(true);
+		
+	}
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/Wallet.java b/JavaAkkaFuCoin/src/fucoin/Wallet.java
new file mode 100644
index 0000000000000000000000000000000000000000..89293d23b69569f8c7fc51325db7e503de7c9580
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/Wallet.java
@@ -0,0 +1,287 @@
+package fucoin;
+import java.util.Collections;
+import java.util.Vector;
+
+import javax.swing.DefaultListModel;
+
+import fucoin.actions.FindWalletAction;
+import fucoin.actions.FindWalletResponseAction;
+import fucoin.actions.InvalidateAction;
+import fucoin.actions.InvokeExitAction;
+import fucoin.actions.InvokeFindWalletAction;
+import fucoin.actions.InvokePerformTransactionAction;
+import fucoin.actions.PerformTransactionAction;
+import fucoin.actions.StoreOrUpdateAction;
+import fucoin.actions.JoinAction;
+import fucoin.actions.JoinActionRespond;
+import fucoin.actions.InvokeStoreOrUpdateAction;
+import fucoin.actions.TransactionPerformedAction;
+import fucoin.actions.WaitForAnswersAction;
+import fucoin.actions.WaitForPerformTransactionAction;
+import fucoin.gui.IWalletGuiControle;
+import akka.actor.ActorPath;
+import akka.actor.ActorRef;
+import akka.actor.ActorSelection;
+import akka.actor.ActorSystem;
+import akka.actor.ActorSystemImpl;
+import akka.actor.Props;
+import akka.actor.UntypedActor;
+import akkateststuff.MyNodeCreator;
+import akkateststuff.Node;
+
+
+public class Wallet extends UntypedActor implements IWallet{
+
+	private ActorRef preknownNeighbour;
+	private String  address ;
+	private int  moneyAmount ;
+	private Vector<WalletPointer>	allKnownNeighbors = new Vector<WalletPointer>();
+	private Vector<Wallet>			synchronizedNeighbors = new Vector<Wallet>();
+	
+
+	public Wallet(String preknownNeighbour) {
+		
+		if(preknownNeighbour!=null){
+			this.preknownNeighbour=stringToActor(preknownNeighbour);
+		}
+	}
+
+	@Override
+	public Vector<WalletPointer> join() {
+		Vector<WalletPointer>	allKnownNeighbors = new Vector<WalletPointer>();
+		for(WalletPointer neighbors : allKnownNeighbors){
+			this.allKnownNeighbors.add(neighbors);
+			gui.addKnownAddress(neighbors.address);
+		}
+		return allKnownNeighbors;
+	}
+
+	@Override
+	public void storeOrUpdate(Wallet w) {
+		if(!synchronizedNeighbors.contains(w)){
+			synchronizedNeighbors.add(w);
+		};
+	}
+
+	@Override
+	public void invalidateWallet(Wallet w) {
+		synchronizedNeighbors.remove(w);
+	}
+
+	@Override
+	public void receiveTransaction(int moneyAmount) {
+		addMoneyAmount(moneyAmount);
+	}
+	private Vector<WalletPointer> answers = new Vector<WalletPointer>();
+	@Override
+	public Vector<WalletPointer> searchWallet(String adress) {
+		for(WalletPointer neighbor : allKnownNeighbors){
+			if(!neighbor.address.equals(adress)){
+				ActorRef actor = stringToActor(neighbor.address);
+				actor.tell(new FindWalletAction(adress), getSelf());
+				
+			}
+		}
+		//unschoener workaround
+		getSelf().tell(new WaitForAnswersAction(), getSelf());
+		return answers;
+	}
+	
+	private boolean isAlive = false;
+	private IWalletGuiControle gui;
+	void  performTransaction ( WalletPointer w,  int  amount ){
+		
+		ActorRef destActor = stringToActor(w.address);
+		destActor.tell(new PerformTransactionAction(w,amount), getSelf());
+		getSelf().tell(new WaitForPerformTransactionAction(w,amount), getSelf());
+		//.tell(new Perform<transaction>, sender);
+	}
+	
+	@Override
+	public void onReceive(Object action) throws Exception {
+		log(""+action);
+		boolean contains = false;
+		String senderName = actorToString(getSender());
+		String selfName = actorToString(getSelf());
+		WalletPointer selfWP = null;
+		for(WalletPointer wp : this.allKnownNeighbors){
+			if(wp.address.equals(senderName)){
+				contains = true;
+				log("knows allready "+senderName);
+			}
+			if(wp.address.equals(selfName)){
+				selfWP = wp;
+			}
+		}
+		if(!contains){
+			this.allKnownNeighbors.add(new WalletPointer(senderName));
+			gui.addKnownAddress(senderName);
+			
+		}
+		if(selfWP!=null){
+			this.allKnownNeighbors.remove(selfWP);
+		}
+		if(action instanceof JoinAction){
+			JoinActionRespond joinaction = new JoinActionRespond(); 
+			joinaction.setKnownNeighbors(join());
+			
+			getSender().tell(joinaction, getSelf());
+		}else if(action instanceof JoinActionRespond){
+			JoinActionRespond joinaction = (JoinActionRespond) action;
+			//allKnownNeighbors.addAll(joinaction.getAllKnownNeighbors());
+			for(WalletPointer neighbor:joinaction.getAllKnownNeighbors()){
+				gui.addKnownAddress(neighbor.address);
+				allKnownNeighbors.add(neighbor);
+			}
+			log(actorToString(getSelf())+"ah there are new neighbours"+joinaction.getAllKnownNeighbors());
+			log("now i know these "+allKnownNeighbors);
+			getSelf().tell(new InvokeFindWalletAction(), getSelf());
+		}else if(action instanceof StoreOrUpdateAction){
+			StoreOrUpdateAction storeOrUpdateAction = (StoreOrUpdateAction) action;
+			storeOrUpdate(storeOrUpdateAction.getWallet());
+		}else if(action instanceof InvokeStoreOrUpdateAction){
+			StoreOrUpdateAction storeOrUpdateAction = new StoreOrUpdateAction();
+			storeOrUpdateAction.setWallet(this);
+			for(WalletPointer neighbor : allKnownNeighbors){
+				stringToActor(neighbor.address).tell(storeOrUpdateAction, getSelf());
+			}
+		}else if(action instanceof InvokeExitAction){
+			getContext().stop(getSelf());
+		}else if(action instanceof InvokeFindWalletAction){
+			InvokeFindWalletAction invokeFindWalletAction = (InvokeFindWalletAction) action;
+			
+			Vector<WalletPointer> wallets = searchWallet(selfName);
+			
+		}else if(action instanceof FindWalletAction){
+			FindWalletAction findWalletAction = (FindWalletAction) action;
+			for(Wallet s : synchronizedNeighbors){
+				log(findWalletAction.getSearchedName());
+				log(s.address);
+				if(s.address.equals(findWalletAction.getSearchedName())){
+					log(""+s.moneyAmount);
+					getSender().tell(new FindWalletResponseAction(selfName,s.moneyAmount), getSelf());
+				}
+			}
+		}else if(action instanceof FindWalletResponseAction){
+			FindWalletResponseAction findWalletResponseAction = (FindWalletResponseAction) action;
+			answers.add(new WalletPointer(findWalletResponseAction.getFoundneighbour()));
+			gui.addKnownAddress(findWalletResponseAction.getFoundneighbour());
+			moneyAmount=findWalletResponseAction.getMoneyAmount();
+			gui.setAmount(moneyAmount);
+		}else if(action instanceof WaitForAnswersAction){
+			log(""+answers);
+			for(WalletPointer answer : answers){
+				stringToActor(answer.address).tell(new InvalidateAction(actorToString(getSelf())),getSelf());
+			}
+		}else if(action instanceof InvalidateAction){
+			InvalidateAction invalidateAction = (InvalidateAction) action;
+			
+			Wallet delWallet = null;
+			
+			for(Wallet w : synchronizedNeighbors){
+				if(w.address.equals(invalidateAction.getInvalidWallet())){
+					delWallet=w;
+				}
+			}
+			log(""+synchronizedNeighbors);
+			invalidateWallet(delWallet);
+			log(""+synchronizedNeighbors);
+		}else if(action instanceof InvokePerformTransactionAction){
+			InvokePerformTransactionAction invokePerformTransactionAction = (InvokePerformTransactionAction) action;
+			performTransaction(invokePerformTransactionAction.getWalletPointer(),invokePerformTransactionAction.getAmount());
+			addMoneyAmount(-invokePerformTransactionAction.getAmount());
+		}else if(action instanceof PerformTransactionAction){
+			PerformTransactionAction performTransactionAction = (PerformTransactionAction) action;
+			if(performTransactionAction.getWalletPointer().address.equals(actorToString(getSelf()))){
+				getSender().tell(new TransactionPerformedAction(), getSelf());
+				receiveTransaction(performTransactionAction.getAmount());
+			}else{
+				for(Wallet syncwallet : synchronizedNeighbors){
+					if(syncwallet.address.equals(performTransactionAction.getWalletPointer().address)){
+						syncwallet.addMoneyAmount(performTransactionAction.getAmount());
+					}
+				}
+			}
+		}else if(action instanceof WaitForPerformTransactionAction){
+			WaitForPerformTransactionAction waitForPerformTransactionAction = (WaitForPerformTransactionAction) action;
+			if(!isAlive){
+				for(Wallet neighbor : synchronizedNeighbors){
+					if(neighbor.address.equals(waitForPerformTransactionAction.getWalletPointer().address)){
+						neighbor.addMoneyAmount(waitForPerformTransactionAction.getAmount());
+						log("have to update "+neighbor.address+"amount because he is offline");
+					}
+					
+				}
+				
+			}
+		}else if(action instanceof TransactionPerformedAction){
+			isAlive=true;
+		}
+	}
+	
+	@Override
+	public void preStart() throws Exception {
+		super.preStart();
+		log("prestart"+preknownNeighbour);
+		this.address=actorToString(getSelf());
+		gui.setAddress(address);
+		addMoneyAmount(100);
+		if(preknownNeighbour!=null){
+			String p = actorToString(preknownNeighbour);
+			allKnownNeighbors.add(new WalletPointer(p));
+			gui.addKnownAddress(p);
+			preknownNeighbour.tell(new JoinAction(), getSelf());
+		}
+	}
+	
+	private void log(String string) {
+		String logMsg = actorToString(getSender()).replace("akka://MySystem/user/", "")+" said "+ string+" to me("+actorToString(getSelf()).replace("akka://MySystem/user/", "")+")";
+		System.out.println(logMsg);
+		gui.addLogMsg(string);
+		
+	}
+
+	public static Props props(String preknownNeighbour, String walletCounter) {
+		return Props.create(new WalletCreator(preknownNeighbour,walletCounter));
+	}
+	
+	public static String actorToString(ActorRef actor){
+		return actor.path().toStringWithAddress(actor.path().address());
+	}
+	
+	public static ActorRef stringToActor(String path){
+		return Main.getSingleton().getSystem().actorFor(path);
+	}
+	
+	public void addMoneyAmount(int moneyAmount) {
+		this.moneyAmount += moneyAmount;
+		this.gui.setAmount(this.moneyAmount);
+	}
+	@Override
+	public String toString() {
+		return address+"'s wallet";
+	}
+
+	public void invokePerformTransaction(WalletPointer walletPointer, int i) {
+		getSelf().tell(new InvokePerformTransactionAction(walletPointer, i),getSelf());
+	}
+
+	@Override
+	public void send(String address, int amount) {
+		invokePerformTransaction(new WalletPointer(address), amount);
+	}
+	
+	public void store() {
+		getSelf().tell(new InvokeStoreOrUpdateAction(), getSelf());
+	}
+
+	public void leave() {
+		store();
+		getSelf().tell(new InvokeExitAction(), getSelf());
+	}
+
+	public void setGui(IWalletGuiControle gui) {
+		this.gui=gui;
+	}
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/WalletCreator.java b/JavaAkkaFuCoin/src/fucoin/WalletCreator.java
new file mode 100644
index 0000000000000000000000000000000000000000..19852aa1d5f70e5f6a351f1653d97f476d75ae71
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/WalletCreator.java
@@ -0,0 +1,85 @@
+package fucoin;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import fucoin.actions.InvokePerformTransactionAction;
+import fucoin.gui.IWalletGuiControle;
+import fucoin.gui.WalletGui;
+import akka.japi.Creator;
+import akkateststuff.Node;
+
+
+public class WalletCreator implements Creator<Wallet>{
+
+	private String preknownNeighbour;
+	private String walletCounter;
+
+	public WalletCreator(String preknownNeighbour, String walletCounter) {
+		this.preknownNeighbour=preknownNeighbour;
+		this.walletCounter=walletCounter;
+	}
+
+	@Override
+	public Wallet create() throws Exception {
+		
+		Wallet tempwallet = new Wallet(preknownNeighbour);
+		IWalletGuiControle gui = new WalletGui(tempwallet);
+		tempwallet.setGui(gui);
+		
+		
+		/*
+		Wallet tempwallet = new Wallet(preknownNeighbour,log);
+		JFrame frame = new JFrame("Wallet:"+walletCounter);
+		frame.setLayout(new GridLayout(3,1));
+		
+		
+		JList<String> list = new JList<String>(log);
+		JTextField dest = new JTextField();
+		JPanel panel = new JPanel();
+		panel.setLayout(new GridLayout(3, 1));
+		JButton storebutton = new JButton("Store");
+		storebutton.addActionListener(new ActionListener() {
+			Wallet wallet = tempwallet;
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				wallet.store();
+			}
+		});
+		JButton exitbutton = new JButton("Exit");
+		exitbutton.addActionListener(new ActionListener() {
+			Wallet wallet = tempwallet;
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				wallet.exit();
+				frame.dispose();
+			}
+		});
+		JButton send10Btn = new JButton("Send10");
+		send10Btn.addActionListener(new ActionListener() {
+			Wallet wallet = tempwallet;
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				
+				wallet.invokePerformTransaction(new WalletPointer(dest.getText()), 10);
+			}
+		});
+		panel.add(storebutton);
+		panel.add(exitbutton);
+		panel.add(send10Btn);
+		frame.add(list);
+		frame.add(dest);
+		frame.add(panel);
+		frame.setSize(300, 300);
+		frame.setVisible(true);*/
+		return tempwallet;
+	} 
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/WalletPointer.java b/JavaAkkaFuCoin/src/fucoin/WalletPointer.java
new file mode 100644
index 0000000000000000000000000000000000000000..6446f90141184e0466ec239fd314d3adc1a6e2af
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/WalletPointer.java
@@ -0,0 +1,20 @@
+package fucoin;
+
+import akka.actor.ActorRef;
+
+public class WalletPointer {
+	public String address;
+	
+	public WalletPointer(String address) {
+		this.address=address;
+	}
+	
+	@Override
+	public String toString() {
+		ActorRef actor = Wallet.stringToActor(address);
+		return actor.path().toStringWithAddress(actor.path().address());
+	}
+
+	
+	
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/FindWalletAction.java b/JavaAkkaFuCoin/src/fucoin/actions/FindWalletAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..f28dfbd209db8478b3521c32da733bf319ec466d
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/FindWalletAction.java
@@ -0,0 +1,15 @@
+package fucoin.actions;
+
+public class FindWalletAction {
+
+	private String searchedName;
+
+	public FindWalletAction(String searchedName) {
+		this.searchedName=searchedName;
+	}
+	
+	public String getSearchedName() {
+		return searchedName;
+	}
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/FindWalletResponseAction.java b/JavaAkkaFuCoin/src/fucoin/actions/FindWalletResponseAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..edbf4f19910fc34bd63242192407ed6ce5f7abd3
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/FindWalletResponseAction.java
@@ -0,0 +1,20 @@
+package fucoin.actions;
+
+public class FindWalletResponseAction {
+
+	private String foundneighbour;
+	private int moneyAmount;
+
+	public FindWalletResponseAction(String foundneighbour, int moneyAmount) {
+		this.foundneighbour=foundneighbour;
+		this.moneyAmount=moneyAmount;
+	}
+	
+	public String getFoundneighbour() {
+		return foundneighbour;
+	}
+
+	public int getMoneyAmount() {
+		return moneyAmount;
+	}
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/InvalidateAction.java b/JavaAkkaFuCoin/src/fucoin/actions/InvalidateAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2e025a7e7f900e2fbef476f7e65a13de783f4e9
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/InvalidateAction.java
@@ -0,0 +1,15 @@
+package fucoin.actions;
+
+public class InvalidateAction {
+
+	private String invalidWallet;
+
+	public InvalidateAction(String invalidWallet) {
+		this.invalidWallet=invalidWallet;
+	}
+	
+	public String getInvalidWallet() {
+		return invalidWallet;
+	}
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/InvokeExitAction.java b/JavaAkkaFuCoin/src/fucoin/actions/InvokeExitAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..653c97de69131ce03196e35b62358f499ed09e8f
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/InvokeExitAction.java
@@ -0,0 +1,9 @@
+package fucoin.actions;
+
+public class InvokeExitAction {
+@Override
+public String toString() {
+	// TODO Auto-generated method stub
+	return "invoke exit";
+}
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/InvokeFindWalletAction.java b/JavaAkkaFuCoin/src/fucoin/actions/InvokeFindWalletAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..72724bba017725e13dba26bfe35356b2af60fbcd
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/InvokeFindWalletAction.java
@@ -0,0 +1,5 @@
+package fucoin.actions;
+
+public class InvokeFindWalletAction {
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/InvokePerformTransactionAction.java b/JavaAkkaFuCoin/src/fucoin/actions/InvokePerformTransactionAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..7818d432ef30e8093bb09191d29efe1f80c1fcf4
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/InvokePerformTransactionAction.java
@@ -0,0 +1,23 @@
+package fucoin.actions;
+
+import fucoin.WalletPointer;
+
+public class InvokePerformTransactionAction {
+
+	private WalletPointer walletPointer;
+	private int amount;
+
+	public InvokePerformTransactionAction(WalletPointer walletPointer, int amount) {
+		this.walletPointer=walletPointer;
+		this.amount=amount;
+	}
+	
+	public WalletPointer getWalletPointer() {
+		return walletPointer;
+	}
+	
+	public int getAmount() {
+		return amount;
+	}
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/InvokeStoreOrUpdateAction.java b/JavaAkkaFuCoin/src/fucoin/actions/InvokeStoreOrUpdateAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..0fd2858b0f41434ce585287e845540ab38437bb9
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/InvokeStoreOrUpdateAction.java
@@ -0,0 +1,11 @@
+package fucoin.actions;
+
+import fucoin.Wallet;
+
+public class InvokeStoreOrUpdateAction {
+@Override
+public String toString() {
+	// TODO Auto-generated method stub
+	return "invoke store or update"; 
+}
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/JoinAction.java b/JavaAkkaFuCoin/src/fucoin/actions/JoinAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..51e37bc875759259e82870aeb932560339854fb9
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/JoinAction.java
@@ -0,0 +1,5 @@
+package fucoin.actions;
+
+public class JoinAction {
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/JoinActionRespond.java b/JavaAkkaFuCoin/src/fucoin/actions/JoinActionRespond.java
new file mode 100644
index 0000000000000000000000000000000000000000..768f0efa7f85dadcc54f91d52761dd338f0ee87e
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/JoinActionRespond.java
@@ -0,0 +1,22 @@
+package fucoin.actions;
+
+import java.util.Vector;
+
+import fucoin.WalletPointer;
+
+public class JoinActionRespond {
+	private Vector<WalletPointer> allKnownNeighbors;
+
+	@Override
+	public String toString() {
+		return "join";
+	}
+
+	public void setKnownNeighbors(Vector<WalletPointer> allKnownNeighbors) {
+		this.allKnownNeighbors=allKnownNeighbors;
+	}
+	
+	public Vector<WalletPointer> getAllKnownNeighbors() {
+		return allKnownNeighbors;
+	}
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/PerformTransactionAction.java b/JavaAkkaFuCoin/src/fucoin/actions/PerformTransactionAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..5144911b48e69eaef8a474919a263cce53a38bad
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/PerformTransactionAction.java
@@ -0,0 +1,23 @@
+package fucoin.actions;
+
+import fucoin.WalletPointer;
+
+public class PerformTransactionAction {
+
+	private WalletPointer walletPointer;
+	private int amount;
+
+	public PerformTransactionAction(WalletPointer walletPointer, int amount) {
+		this.walletPointer=walletPointer;
+		this.amount=amount;
+	}
+	
+	public WalletPointer getWalletPointer() {
+		return walletPointer;
+	}
+	
+	public int getAmount() {
+		return amount;
+	}
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/StoreOrUpdateAction.java b/JavaAkkaFuCoin/src/fucoin/actions/StoreOrUpdateAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..694096404d2fb922d60d614a7522fa276ab220b2
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/StoreOrUpdateAction.java
@@ -0,0 +1,22 @@
+package fucoin.actions;
+
+import fucoin.Wallet;
+
+public class StoreOrUpdateAction {
+
+	private Wallet wallet;
+
+	public void setWallet(Wallet wallet) {
+		this.wallet=wallet;
+	}
+
+	public Wallet getWallet() {
+		return wallet;
+	}
+	
+	@Override
+	public String toString() {
+		return "store or update";
+	}
+	
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/TransactionPerformedAction.java b/JavaAkkaFuCoin/src/fucoin/actions/TransactionPerformedAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..3c9e1e4c3146385810c94cc815867bba64fa896d
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/TransactionPerformedAction.java
@@ -0,0 +1,5 @@
+package fucoin.actions;
+
+public class TransactionPerformedAction {
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/WaitForAnswersAction.java b/JavaAkkaFuCoin/src/fucoin/actions/WaitForAnswersAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..28062a1598331de2abfe8e533462b130ee059a29
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/WaitForAnswersAction.java
@@ -0,0 +1,5 @@
+package fucoin.actions;
+
+public class WaitForAnswersAction {
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/actions/WaitForPerformTransactionAction.java b/JavaAkkaFuCoin/src/fucoin/actions/WaitForPerformTransactionAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..f197ffbc4e280f007a7919c19b71da8aa099c06b
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/actions/WaitForPerformTransactionAction.java
@@ -0,0 +1,21 @@
+package fucoin.actions;
+
+import fucoin.WalletPointer;
+
+public class WaitForPerformTransactionAction {
+	private WalletPointer walletPointer;
+	private int amount;
+
+	public WaitForPerformTransactionAction(WalletPointer walletPointer, int amount) {
+		this.walletPointer=walletPointer;
+		this.amount=amount;
+	}
+	
+	public WalletPointer getWalletPointer() {
+		return walletPointer;
+	}
+	
+	public int getAmount() {
+		return amount;
+	}
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/gui/IWalletControle.java b/JavaAkkaFuCoin/src/fucoin/gui/IWalletControle.java
new file mode 100644
index 0000000000000000000000000000000000000000..ff7f46cd6f47b6a4938fdb7927646a38a4544012
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/gui/IWalletControle.java
@@ -0,0 +1,8 @@
+package fucoin.gui;
+
+
+public interface IWalletControle {
+	public void leave();
+	public void store();
+	public void send(String address, int amount);
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/gui/IWalletGuiControle.java b/JavaAkkaFuCoin/src/fucoin/gui/IWalletGuiControle.java
new file mode 100644
index 0000000000000000000000000000000000000000..55d46acd3c35a3504d395644486b94f27b8a5a73
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/gui/IWalletGuiControle.java
@@ -0,0 +1,12 @@
+package fucoin.gui;
+
+
+public interface IWalletGuiControle {
+	public void setAddress(String address);
+	public void setAmount(int amount);
+	public void addKnownAddress(String address);
+	public void addLogMsg(String msg);
+	
+	
+	
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/gui/WalletControle.java b/JavaAkkaFuCoin/src/fucoin/gui/WalletControle.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9f72e8ad4bb5ddd85d25d1457c0adf87426bd54
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/gui/WalletControle.java
@@ -0,0 +1,24 @@
+package fucoin.gui;
+
+
+public class WalletControle implements IWalletControle{
+
+	@Override
+	public void leave() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void store() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void send(String address, int amount) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}
diff --git a/JavaAkkaFuCoin/src/fucoin/gui/WalletGui.java b/JavaAkkaFuCoin/src/fucoin/gui/WalletGui.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6ccfc1eebb5503b426784251547843e048f9d1f
--- /dev/null
+++ b/JavaAkkaFuCoin/src/fucoin/gui/WalletGui.java
@@ -0,0 +1,142 @@
+package fucoin.gui;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+
+public class WalletGui implements IWalletGuiControle{
+	DefaultListModel<String> log = new DefaultListModel<String>();
+	
+	private JFrame window = new JFrame("test");
+	JPanel topPanel = new JPanel();
+	JLabel lblMyAddress = new JLabel("My Address:");
+	JTextField txtMyAddress = new JTextField("<MyAddress>");
+	JLabel lblEmpty = new JLabel("");
+	JLabel lblMyAmount = new JLabel("My FUCs");
+	JTextField txtMyAmount = new JTextField("<MyFUCs>");
+	JPanel centerPanel = new JPanel();
+	JLabel lblSendTo = new JLabel("Send to:");
+	JComboBox<String> txtSendTo = new JComboBox<String>();
+	JLabel lblSendAmount = new JLabel("Amount:");
+	JTextField txtSendAmount = new JTextField("<Amount>");
+	JButton btnSend = new JButton("Send");
+	JButton btnSearch = new JButton("Search");
+	JButton btnStore = new JButton("Store");
+	JButton btnExit = new JButton("Exit");
+	JPanel bottomPanel = new JPanel();
+	JList<String> txtLog = new JList<String>(log);
+
+public WalletGui(IWalletControle walletControle) {
+
+	
+	window.setSize(400, 600);
+	window.setLayout(new GridLayout(3, 1));
+	topPanel.setLayout(new GridLayout(2, 3));
+	// Row 1
+	topPanel.add(lblMyAddress);
+	topPanel.add(txtMyAddress);
+	topPanel.add(lblEmpty);
+	// Row 2
+	topPanel.add(lblMyAmount);
+	topPanel.add(txtMyAmount);
+	window.add(topPanel);
+	//<hr>
+	centerPanel.setLayout(new GridLayout(3, 1));
+	// Row 1
+	JPanel centerup = new JPanel();
+	centerup.setLayout(new BorderLayout());
+	centerup.add(lblSendTo,BorderLayout.WEST);
+	centerup.add(txtSendTo,BorderLayout.CENTER);
+	centerPanel.add(centerup);
+	// Row 2
+	JPanel centerdown = new JPanel();
+	centerdown.setLayout(new GridLayout(1, 3));
+	centerdown.add(lblSendAmount);
+	centerdown.add(txtSendAmount);
+	centerdown.add(btnSend);
+	centerPanel.add(centerdown);
+	//centerPanel.add(new JLabel(""));
+	// Row 3
+	JPanel centerdown2 = new JPanel();
+	centerdown2.setLayout(new GridLayout(1, 3));
+	centerdown2.add(btnSearch);
+	centerdown2.add(btnStore);
+	centerdown2.add(btnExit);
+	centerPanel.add(centerdown2);
+	window.add(centerPanel);
+	//<hr>
+	bottomPanel.setLayout(new GridLayout(1, 1));
+	bottomPanel.add(txtLog);
+	window.add(bottomPanel);
+	window.setVisible(true);
+	
+	btnSend.addActionListener(new ActionListener() {
+		
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			walletControle.send(txtSendTo.getSelectedItem().toString(), Integer.parseInt(txtSendAmount.getText()));
+		}
+	});
+	
+	btnStore.addActionListener(new ActionListener() {
+		
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			walletControle.store();
+		}
+	});
+	
+	btnExit.addActionListener(new ActionListener() {
+		
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			window.dispose();
+		}
+	});
+	
+	window.addWindowListener(new WindowAdapter() {
+		@Override
+		public void windowClosed(WindowEvent e) {
+			System.out.println("window closing");
+			walletControle.leave();
+		}
+	});
+}
+public static void main(String[] args) {
+	new WalletGui(new WalletControle());
+}
+@Override
+public void setAddress(String address) {
+	txtMyAddress.setText(address);
+	window.setTitle(address);
+}
+@Override
+public void setAmount(int amount) {
+	txtMyAmount.setText(""+amount);
+}
+
+@Override
+public void addKnownAddress(String address) {
+	
+	txtSendTo.addItem(address);
+}
+@Override
+public void addLogMsg(String msg) {
+	log.addElement(msg);	
+}
+}