diff --git a/.gitignore b/.gitignore
index 89362a333a..e733251672 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@
 /bin
 .idea
 bitsquare.iml
+.spvchain
+.wallet
diff --git a/pom.xml b/pom.xml
index c878cf8081..24ffeb56ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,14 +4,21 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     4.0.0
 
-    bitsquare
+    io.bitsquare
     bitsquare
-    0.1
+    0.01-SNAPSHOT
 
     BitSquare
     A P2P Fiat-Bitcoin Exchange
     https://www.bitsquare.io
 
+    
+        com.google
+        bitcoinj-parent
+        0.12-SNAPSHOT
+        libs/bitcoinj/pom.xml
+    
+
     
         
             Apache 2
@@ -24,6 +31,31 @@
         https://github.com/bitsquare/bitsquare
     
 
+    
+        
+            sonatype-oss-snapshot
+            
+            https://oss.sonatype.org/content/repositories/snapshots
+        
+        
+            sonatype-oss-snapshot2
+            
+            https://oss.sonatype.org/content/groups/public
+        
+        
+        
+            bitcoinj-release
+            
+            http://distribution.bitcoinj.googlecode.com/git/releases
+        
+        
+        
+            mvn-adamgent
+            http://mvn-adamgent.googlecode.com/svn/maven/release
+            Adam Gent Maven Repository
+        
+    
+
     
         
             
@@ -33,24 +65,27 @@
                 src/main/resources
             
         
-
         
             
                 org.apache.maven.plugins
-                maven-jar-plugin
-                2.4
+                maven-compiler-plugin
+                3.1
                 
-                    
-                        
-                            io.bitsquare.BitSquare
-                        
-                    
+                    1.8
+                    1.8
                 
             
         
     
 
     
+
+        
+            com.google
+            bitcoinj
+            0.12-SNAPSHOT
+        
+
         
             junit
             junit
@@ -60,7 +95,7 @@
 
         
             org.slf4j
-            slf4j-api
+            slf4j-jdk14
             1.7.6
         
 
@@ -80,8 +115,14 @@
 
         
             com.google.guava
-            guava-base
-            r03
+            guava
+            16.0.1
+        
+
+        
+            com.aquafx-project
+            aquafx
+            0.1
         
 
         
@@ -97,6 +138,17 @@
             8.0.5
         
 
+        
+            de.jensd
+            fontawesomefx
+            8.0.0
+        
+        
+            net.glxn
+            qrgen
+            1.3
+        
+
     
 
     
diff --git a/src/main/java/io/bitsquare/BitSquare.java b/src/main/java/io/bitsquare/BitSquare.java
index 23130450e7..7fe0ea6838 100644
--- a/src/main/java/io/bitsquare/BitSquare.java
+++ b/src/main/java/io/bitsquare/BitSquare.java
@@ -1,12 +1,18 @@
 package io.bitsquare;
 
+import com.google.bitcoin.store.BlockStoreException;
+import com.google.bitcoin.utils.BriefLogFormatter;
+import com.google.bitcoin.utils.Threading;
+import com.google.common.base.Throwables;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
+import io.bitsquare.btc.IWalletFacade;
 import io.bitsquare.di.BitSquareModule;
 import io.bitsquare.di.GuiceFXMLLoader;
 import io.bitsquare.setup.ISetup;
 import io.bitsquare.setup.MockSetup;
 import javafx.application.Application;
+import javafx.application.Platform;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
@@ -18,6 +24,7 @@ import java.io.IOException;
 public class BitSquare extends Application
 {
     private static final Logger log = LoggerFactory.getLogger(BitSquare.class);
+    private IWalletFacade walletFacade;
 
     public static void main(String[] args)
     {
@@ -25,27 +32,66 @@ public class BitSquare extends Application
     }
 
     @Override
-    public void start(Stage stage)
+    public void start(Stage stage) throws Exception
     {
-        Injector injector = Guice.createInjector(new BitSquareModule());
-        ISetup setup = injector.getInstance(MockSetup.class);
+        // Show the crash dialog for any exceptions that we don't handle and that hit the main loop.
+        //GuiUtils.handleCrashesOnThisThread();
+        try
+        {
+            init(stage);
+        } catch (Throwable t)
+        {
+            // Nicer message for the case where the block store file is locked.
+            if (Throwables.getRootCause(t) instanceof BlockStoreException)
+            {
+                //GuiUtils.informationalAlert("Already running", "This application is already running and cannot be started twice.");
+            }
+            else
+            {
+                throw t;
+            }
+        }
+    }
 
+    @Override
+    public void stop() throws Exception
+    {
+        walletFacade.terminateWallet();
+
+        super.stop();
+    }
+
+    private void init(Stage stage) throws IOException
+    {
+        // Make log output concise.
+        BriefLogFormatter.init();
+
+        // Tell bitcoinj to run event handlers on the JavaFX UI thread. This keeps things simple and means
+        // we cannot forget to switch threads when adding event handlers. Unfortunately, the DownloadListener
+        // we give to the app kit is currently an exception and runs on a library thread. It'll get fixed in
+        // a future version.
+        Threading.USER_THREAD = Platform::runLater;
+
+        final Injector injector = Guice.createInjector(new BitSquareModule());
+        walletFacade = injector.getInstance(IWalletFacade.class);
+
+        final ISetup setup = injector.getInstance(MockSetup.class);
         setup.applyPersistedData();
 
         stage.setTitle("BitSquare");
 
-        GuiceFXMLLoader loader = new GuiceFXMLLoader(injector);
-        try
-        {
-            Parent mainView = loader.load(BitSquare.class.getResourceAsStream("/io/bitsquare/gui/MainView.fxml"));
-            Scene scene = new Scene(mainView, 800, 600);
-            scene.getStylesheets().setAll(getClass().getResource("/io/bitsquare/gui/global.css").toExternalForm());
-            stage.setScene(scene);
-            stage.show();
-        } catch (IOException e)
-        {
-            e.printStackTrace();
-        }
-    }
+        // main view
+        final GuiceFXMLLoader loader = new GuiceFXMLLoader(injector);
+        final Parent mainView = loader.load(BitSquare.class.getResourceAsStream("/io/bitsquare/gui/MainView.fxml"));
+        final Scene scene = new Scene(mainView, 800, 600);
+        stage.setScene(scene);
 
+        // apply css
+        final String global = getClass().getResource("/io/bitsquare/gui/global.css").toExternalForm();
+        // final String textValidation = getClass().getResource("/wallettemplate/utils/text-validation.css").toExternalForm();
+        //scene.getStylesheets().setAll(global, textValidation);
+        scene.getStylesheets().setAll(global);
+
+        stage.show();
+    }
 }
diff --git a/src/main/java/io/bitsquare/btc/IWalletFacade.java b/src/main/java/io/bitsquare/btc/IWalletFacade.java
index 3981da16bb..3c36732e3d 100644
--- a/src/main/java/io/bitsquare/btc/IWalletFacade.java
+++ b/src/main/java/io/bitsquare/btc/IWalletFacade.java
@@ -1,9 +1,19 @@
 package io.bitsquare.btc;
 
+import com.google.bitcoin.core.PeerEventListener;
+
 import java.math.BigInteger;
 
 public interface IWalletFacade
 {
+    public static final String MAIN_NET = "MAIN_NET";
+    public static final String TEST_NET = "TEST_NET";
+    public static final String REG_TEST_NET = "REG_TEST_NET";
+
+    void initWallet(PeerEventListener peerEventListener);
+
+    void terminateWallet();
+
     BigInteger getBalance();
 
     boolean pay(BigInteger satoshisToPay, String destinationAddress);
diff --git a/src/main/java/io/bitsquare/btc/MockWalletFacade.java b/src/main/java/io/bitsquare/btc/MockWalletFacade.java
deleted file mode 100644
index 3443a2bdbe..0000000000
--- a/src/main/java/io/bitsquare/btc/MockWalletFacade.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package io.bitsquare.btc;
-
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.math.BigInteger;
-import java.util.UUID;
-
-/**
- * Gateway to wallet
- */
-public class MockWalletFacade implements IWalletFacade
-{
-    private static final Logger log = LoggerFactory.getLogger(MockWalletFacade.class);
-
-    private BigInteger balance;
-
-    public MockWalletFacade()
-    {
-        balance = new BigInteger("100000000");
-    }
-
-    @Override
-    public BigInteger getBalance()
-    {
-        return balance;
-    }
-
-    @Override
-    public boolean pay(BigInteger satoshisToPay, String destinationAddress)
-    {
-        if (getBalance().subtract(satoshisToPay).longValue() > 0)
-        {
-            log.info("Pay " + satoshisToPay.toString() + " Satoshis to " + destinationAddress);
-            return true;
-        }
-        else
-        {
-            log.warn("Not enough funds in wallet for paying " + satoshisToPay.toString() + " Satoshis.");
-            return false;
-        }
-
-    }
-
-    @Override
-    public KeyPair createNewAddress()
-    {
-        //MOCK
-        return new KeyPair(UUID.randomUUID().toString(), UUID.randomUUID().toString());
-    }
-}
diff --git a/src/main/java/io/bitsquare/btc/WalletFacade.java b/src/main/java/io/bitsquare/btc/WalletFacade.java
new file mode 100644
index 0000000000..853b0f30ce
--- /dev/null
+++ b/src/main/java/io/bitsquare/btc/WalletFacade.java
@@ -0,0 +1,97 @@
+package io.bitsquare.btc;
+
+import com.google.bitcoin.core.NetworkParameters;
+import com.google.bitcoin.core.PeerEventListener;
+import com.google.bitcoin.kits.WalletAppKit;
+import com.google.bitcoin.params.MainNetParams;
+import com.google.bitcoin.params.RegTestParams;
+import com.google.inject.Inject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.math.BigInteger;
+import java.util.UUID;
+
+public class WalletFacade implements IWalletFacade
+{
+    private static final Logger log = LoggerFactory.getLogger(WalletFacade.class);
+    private NetworkParameters networkParameters;
+    private WalletAppKit walletAppKit;
+
+    private BigInteger balance;
+
+    @Inject
+    public WalletFacade(NetworkParameters networkParameters, WalletAppKit walletAppKit)
+    {
+        this.networkParameters = networkParameters;
+        this.walletAppKit = walletAppKit;
+
+        balance = new BigInteger("100000000");
+    }
+
+    public void initWallet(PeerEventListener peerEventListener)
+    {
+        if (networkParameters == RegTestParams.get())
+        {
+            walletAppKit.connectToLocalHost();   // You should run a regtest mode bitcoind locally.
+        }
+        else if (networkParameters == MainNetParams.get())
+        {
+            // Checkpoints are block headers that ship inside our app: for a new user, we pick the last header
+            // in the checkpoints file and then download the rest from the network. It makes things much faster.
+            // Checkpoint files are made using the BuildCheckpoints tool and usually we have to download the
+            // last months worth or more (takes a few seconds).
+            walletAppKit.setCheckpoints(getClass().getResourceAsStream("/wallet/checkpoints"));
+        }
+
+        // Now configure and start the appkit. This will take a second or two - we could show a temporary splash screen
+        // or progress widget to keep the user engaged whilst we initialise, but we don't.
+        walletAppKit.setDownloadListener(peerEventListener)
+                .setBlockingStartup(false)
+                .setUserAgent("BitSquare", "1.0");
+        walletAppKit.startAsync();
+        walletAppKit.awaitRunning();
+        // Don't make the user wait for confirmations for now, as the intention is they're sending it their own money!
+        walletAppKit.wallet().allowSpendingUnconfirmedTransactions();
+        walletAppKit.peerGroup().setMaxConnections(11);
+
+        log.info(walletAppKit.wallet().toString());
+    }
+
+    public void terminateWallet()
+    {
+        walletAppKit.stopAsync();
+        walletAppKit.awaitTerminated();
+    }
+
+
+    //MOCK...
+    @Override
+    public BigInteger getBalance()
+    {
+        return balance;
+    }
+
+    @Override
+    public boolean pay(BigInteger satoshisToPay, String destinationAddress)
+    {
+        if (getBalance().subtract(satoshisToPay).longValue() > 0)
+        {
+            log.info("Pay " + satoshisToPay.toString() + " Satoshis to " + destinationAddress);
+            return true;
+        }
+        else
+        {
+            log.warn("Not enough funds in wallet for paying " + satoshisToPay.toString() + " Satoshis.");
+            return false;
+        }
+
+    }
+
+    @Override
+    public KeyPair createNewAddress()
+    {
+        //MOCK
+        return new KeyPair(UUID.randomUUID().toString(), UUID.randomUUID().toString());
+    }
+}
diff --git a/src/main/java/io/bitsquare/di/BitSquareModule.java b/src/main/java/io/bitsquare/di/BitSquareModule.java
index 4190481eb1..683689ffeb 100644
--- a/src/main/java/io/bitsquare/di/BitSquareModule.java
+++ b/src/main/java/io/bitsquare/di/BitSquareModule.java
@@ -1,10 +1,19 @@
 package io.bitsquare.di;
 
 
+import com.google.bitcoin.core.NetworkParameters;
+import com.google.bitcoin.kits.WalletAppKit;
+import com.google.bitcoin.params.MainNetParams;
+import com.google.bitcoin.params.RegTestParams;
+import com.google.bitcoin.params.TestNet3Params;
 import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.name.Named;
+import com.google.inject.name.Names;
 import io.bitsquare.btc.BlockChainFacade;
 import io.bitsquare.btc.IWalletFacade;
-import io.bitsquare.btc.MockWalletFacade;
+import io.bitsquare.btc.WalletFacade;
 import io.bitsquare.crypto.ICryptoFacade;
 import io.bitsquare.crypto.MockCryptoFacade;
 import io.bitsquare.msg.IMessageFacade;
@@ -21,8 +30,12 @@ import io.bitsquare.trade.orderbook.MockOrderBook;
 import io.bitsquare.trade.orderbook.OrderBookFilter;
 import io.bitsquare.user.User;
 
+import java.io.File;
+
 public class BitSquareModule extends AbstractModule
 {
+
+
     @Override
     protected void configure()
     {
@@ -35,10 +48,62 @@ public class BitSquareModule extends AbstractModule
         bind(OrderBookFilterSettings.class).asEagerSingleton();
 
         bind(ICryptoFacade.class).to(MockCryptoFacade.class).asEagerSingleton();
-        bind(IWalletFacade.class).to(MockWalletFacade.class).asEagerSingleton();
+        bind(IWalletFacade.class).to(WalletFacade.class).asEagerSingleton();
         bind(BlockChainFacade.class).asEagerSingleton();
         bind(IMessageFacade.class).to(MessageFacade.class).asEagerSingleton();
 
         bind(TradingFacade.class).asEagerSingleton();
+
+        bind(String.class).annotatedWith(Names.named("networkType")).toInstance(IWalletFacade.MAIN_NET);
+        bind(NetworkParameters.class).toProvider(NetworkParametersProvider.class).asEagerSingleton();
+        bind(WalletAppKit.class).toProvider(WalletAppKitProvider.class).asEagerSingleton();
+    }
+
+
+}
+
+class WalletAppKitProvider implements Provider
+{
+    private NetworkParameters networkParameters;
+
+    @Inject
+    public WalletAppKitProvider(NetworkParameters networkParameters)
+    {
+        this.networkParameters = networkParameters;
+    }
+
+    public WalletAppKit get()
+    {
+        return new WalletAppKit(networkParameters, new File("."), "bitsquare");
+    }
+}
+
+class NetworkParametersProvider implements Provider
+{
+    private String networkType;
+
+    @Inject
+    public NetworkParametersProvider(@Named("networkType") String networkType)
+    {
+        this.networkType = networkType;
+    }
+
+    public NetworkParameters get()
+    {
+        NetworkParameters result = null;
+
+        switch (networkType)
+        {
+            case IWalletFacade.MAIN_NET:
+                result = MainNetParams.get();
+                break;
+            case IWalletFacade.TEST_NET:
+                result = TestNet3Params.get();
+                break;
+            case IWalletFacade.REG_TEST_NET:
+                result = RegTestParams.get();
+                break;
+        }
+        return result;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/io/bitsquare/gui/MainController.java b/src/main/java/io/bitsquare/gui/MainController.java
index 7125b4b684..ff373ad3bd 100644
--- a/src/main/java/io/bitsquare/gui/MainController.java
+++ b/src/main/java/io/bitsquare/gui/MainController.java
@@ -1,13 +1,18 @@
 package io.bitsquare.gui;
 
+import com.google.bitcoin.core.DownloadListener;
 import com.google.inject.Inject;
 import io.bitsquare.BitSquare;
+import io.bitsquare.btc.IWalletFacade;
 import io.bitsquare.di.GuiceFXMLLoader;
 import io.bitsquare.gui.trade.TradeController;
 import io.bitsquare.gui.util.Icons;
 import io.bitsquare.settings.Settings;
 import io.bitsquare.trade.Direction;
 import io.bitsquare.trade.orderbook.OrderBookFilter;
+import javafx.animation.FadeTransition;
+import javafx.animation.Interpolator;
+import javafx.application.Platform;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.collections.FXCollections;
@@ -15,61 +20,59 @@ import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
 import javafx.fxml.Initializable;
 import javafx.scene.Node;
-import javafx.scene.control.ComboBox;
-import javafx.scene.control.Label;
-import javafx.scene.control.ToggleButton;
-import javafx.scene.control.ToggleGroup;
+import javafx.scene.control.*;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.Pane;
 import javafx.scene.layout.VBox;
+import javafx.util.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.net.URL;
 import java.util.Currency;
+import java.util.Date;
 import java.util.ResourceBundle;
 
 public class MainController implements Initializable, INavigationController
 {
+    private static final Logger log = LoggerFactory.getLogger(MainController.class);
+
     private Settings settings;
     private OrderBookFilter orderBookFilter;
+    private IWalletFacade walletFacade;
     private IChildController childController;
     private ToggleGroup toggleGroup;
     private ToggleButton prevToggleButton;
     private Image prevToggleButtonIcon;
+    public ProgressBar networkSyncProgressBar;
+    public Label networkSyncInfoLabel;
 
     @FXML
     public Pane contentPane;
-    public HBox leftNavPane, rightNavPane;
+    public HBox leftNavPane, rightNavPane, footerContainer;
 
     @Inject
-    public MainController(Settings settings, OrderBookFilter orderBookFilter)
+    public MainController(Settings settings, OrderBookFilter orderBookFilter, IWalletFacade walletFacade)
     {
         this.settings = settings;
         this.orderBookFilter = orderBookFilter;
+        this.walletFacade = walletFacade;
     }
 
     @Override
     public void initialize(URL url, ResourceBundle rb)
     {
-        toggleGroup = new ToggleGroup();
+        buildNavigation();
 
-        ToggleButton homeButton = addNavButton(leftNavPane, "Overview", Icons.HOME, Icons.HOME, INavigationController.HOME);
-        ToggleButton buyButton = addNavButton(leftNavPane, "Buy BTC", Icons.NAV_BUY, Icons.NAV_BUY_ACTIVE, INavigationController.TRADE, Direction.BUY);
-        ToggleButton sellButton = addNavButton(leftNavPane, "Sell BTC", Icons.NAV_SELL, Icons.NAV_SELL_ACTIVE, INavigationController.TRADE, Direction.SELL);
-        addNavButton(leftNavPane, "Orders", Icons.ORDERS, Icons.ORDERS, INavigationController.ORDERS);
-        addNavButton(leftNavPane, "History", Icons.HISTORY, Icons.HISTORY, INavigationController.HISTORY);
-        addNavButton(leftNavPane, "Funds", Icons.FUNDS, Icons.FUNDS, INavigationController.FUNDS);
-        addNavButton(leftNavPane, "Message", Icons.MSG, Icons.MSG, INavigationController.MSG);
-        addCurrencyComboBox();
-        addNavButton(rightNavPane, "Settings", Icons.SETTINGS, Icons.SETTINGS, INavigationController.SETTINGS);
+        buildFooter();
 
-
-        sellButton.fire();
-        //homeButton.fire();
+        walletFacade.initWallet(new ProgressBarUpdater());
     }
 
+
     @Override
     public IChildController navigateToView(String fxmlView, String title)
     {
@@ -99,6 +102,34 @@ public class MainController implements Initializable, INavigationController
         return childController;
     }
 
+    private void buildNavigation()
+    {
+        toggleGroup = new ToggleGroup();
+
+        ToggleButton homeButton = addNavButton(leftNavPane, "Overview", Icons.HOME, Icons.HOME, INavigationController.HOME);
+        ToggleButton buyButton = addNavButton(leftNavPane, "Buy BTC", Icons.NAV_BUY, Icons.NAV_BUY_ACTIVE, INavigationController.TRADE, Direction.BUY);
+        ToggleButton sellButton = addNavButton(leftNavPane, "Sell BTC", Icons.NAV_SELL, Icons.NAV_SELL_ACTIVE, INavigationController.TRADE, Direction.SELL);
+        addNavButton(leftNavPane, "Orders", Icons.ORDERS, Icons.ORDERS, INavigationController.ORDERS);
+        addNavButton(leftNavPane, "History", Icons.HISTORY, Icons.HISTORY, INavigationController.HISTORY);
+        addNavButton(leftNavPane, "Funds", Icons.FUNDS, Icons.FUNDS, INavigationController.FUNDS);
+        addNavButton(leftNavPane, "Message", Icons.MSG, Icons.MSG, INavigationController.MSG);
+        addCurrencyComboBox();
+        addNavButton(rightNavPane, "Settings", Icons.SETTINGS, Icons.SETTINGS, INavigationController.SETTINGS);
+
+        sellButton.fire();
+        //homeButton.fire();
+    }
+
+    private void buildFooter()
+    {
+        networkSyncInfoLabel = new Label();
+        networkSyncInfoLabel.setText("Synchronize with network...");
+        networkSyncProgressBar = new ProgressBar();
+        networkSyncProgressBar.setPrefWidth(200);
+        networkSyncProgressBar.setProgress(-1);
+        footerContainer.getChildren().addAll(networkSyncProgressBar, networkSyncInfoLabel);
+    }
+
     private ToggleButton addNavButton(Pane parent, String title, String iconId, String iconIdActivated, String navTarget)
     {
         return addNavButton(parent, title, iconId, iconIdActivated, navTarget, null);
@@ -162,4 +193,40 @@ public class MainController implements Initializable, INavigationController
         holder.getChildren().add(currencyComboBox);
         rightNavPane.getChildren().add(holder);
     }
+
+    private void setProgress(double percent)
+    {
+        networkSyncProgressBar.setProgress(percent / 100.0);
+        networkSyncInfoLabel.setText("Synchronize with network: " + (int) percent + "%");
+    }
+
+    private void doneDownload()
+    {
+        networkSyncInfoLabel.setText("Sync with network: Done");
+
+        FadeTransition fade = new FadeTransition(Duration.millis(700), footerContainer);
+        fade.setToValue(0.0);
+        fade.setCycleCount(1);
+        fade.setInterpolator(Interpolator.EASE_BOTH);
+        fade.play();
+        fade.setOnFinished(e -> footerContainer.getChildren().clear());
+    }
+
+    private class ProgressBarUpdater extends DownloadListener
+    {
+        @Override
+        protected void progress(double percent, int blocksSoFar, Date date)
+        {
+            super.progress(percent, blocksSoFar, date);
+            Platform.runLater(() -> MainController.this.setProgress(percent));
+        }
+
+        @Override
+        protected void doneDownload()
+        {
+            super.doneDownload();
+            Platform.runLater(MainController.this::doneDownload);
+        }
+
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/io/bitsquare/gui/MainView.fxml b/src/main/java/io/bitsquare/gui/MainView.fxml
index f3b9269c29..7de5014ed5 100644
--- a/src/main/java/io/bitsquare/gui/MainView.fxml
+++ b/src/main/java/io/bitsquare/gui/MainView.fxml
@@ -8,7 +8,9 @@
     
         
         
-        
+        
     
 
diff --git a/src/main/java/io/bitsquare/gui/funds/FundsController.java b/src/main/java/io/bitsquare/gui/funds/FundsController.java
index b061a88ad9..feab2b0c72 100644
--- a/src/main/java/io/bitsquare/gui/funds/FundsController.java
+++ b/src/main/java/io/bitsquare/gui/funds/FundsController.java
@@ -2,19 +2,25 @@ package io.bitsquare.gui.funds;
 
 import io.bitsquare.gui.IChildController;
 import io.bitsquare.gui.INavigationController;
+import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
+import javafx.scene.layout.Pane;
 
 import java.net.URL;
 import java.util.ResourceBundle;
 
+
 public class FundsController implements Initializable, IChildController
 {
+
     private INavigationController navigationController;
 
+    @FXML
+    public Pane rootContainer;
+
     @Override
     public void initialize(URL url, ResourceBundle rb)
     {
-
     }
 
     @Override
@@ -22,5 +28,6 @@ public class FundsController implements Initializable, IChildController
     {
         this.navigationController = navigationController;
     }
+
 }
 
diff --git a/src/main/java/io/bitsquare/gui/funds/FundsView.fxml b/src/main/java/io/bitsquare/gui/funds/FundsView.fxml
index 9fcfeed4e1..3eda0873fd 100644
--- a/src/main/java/io/bitsquare/gui/funds/FundsView.fxml
+++ b/src/main/java/io/bitsquare/gui/funds/FundsView.fxml
@@ -1,6 +1,6 @@
 
 
 
+      xmlns:fx="http://javafx.com/fxml" fx:id="rootContainer">
     
 
\ No newline at end of file
diff --git a/src/main/java/io/bitsquare/gui/trade/tradeprocess/TradeProcessController.java b/src/main/java/io/bitsquare/gui/trade/tradeprocess/TradeProcessController.java
index 0e0691cdc5..e5fddc2ade 100644
--- a/src/main/java/io/bitsquare/gui/trade/tradeprocess/TradeProcessController.java
+++ b/src/main/java/io/bitsquare/gui/trade/tradeprocess/TradeProcessController.java
@@ -199,7 +199,7 @@ public class TradeProcessController implements Initializable, IChildController
     private void onBankTransferInited()
     {
         infoLabel.setText("Bank transfer has been inited.\nCheck your bank account and continue when you have received the money.\n");
-        nextButton.setText("Money received on Bank account");
+        nextButton.setText("I have received the bank transfer");
         nextButton.setOnAction(e -> releaseBTC());
         vBox.getChildren().add(nextButton);
     }
diff --git a/src/main/java/io/bitsquare/trade/TradingFacade.java b/src/main/java/io/bitsquare/trade/TradingFacade.java
index 11ad75d20c..639344e020 100644
--- a/src/main/java/io/bitsquare/trade/TradingFacade.java
+++ b/src/main/java/io/bitsquare/trade/TradingFacade.java
@@ -2,8 +2,8 @@ package io.bitsquare.trade;
 
 import com.google.inject.Inject;
 import io.bitsquare.btc.BlockChainFacade;
+import io.bitsquare.btc.IWalletFacade;
 import io.bitsquare.btc.KeyPair;
-import io.bitsquare.btc.MockWalletFacade;
 import io.bitsquare.crypto.ICryptoFacade;
 import io.bitsquare.msg.IMessageFacade;
 import io.bitsquare.msg.Message;
@@ -29,7 +29,7 @@ public class TradingFacade
     private User user;
     private IMessageFacade messageFacade;
     private BlockChainFacade blockChainFacade;
-    private MockWalletFacade walletFacade;
+    private IWalletFacade walletFacade;
     private ICryptoFacade cryptoFacade;
     private Settings settings;
 
@@ -38,7 +38,7 @@ public class TradingFacade
                          Settings settings,
                          IMessageFacade messageFacade,
                          BlockChainFacade blockChainFacade,
-                         MockWalletFacade walletFacade,
+                         IWalletFacade walletFacade,
                          ICryptoFacade cryptoFacade)
     {
         this.user = user;
diff --git a/src/main/java/io/bitsquare/trade/payment/process/PaymentProcess.java b/src/main/java/io/bitsquare/trade/payment/process/PaymentProcess.java
index accf29fc3b..5181160ed6 100644
--- a/src/main/java/io/bitsquare/trade/payment/process/PaymentProcess.java
+++ b/src/main/java/io/bitsquare/trade/payment/process/PaymentProcess.java
@@ -2,7 +2,7 @@ package io.bitsquare.trade.payment.process;
 
 import com.google.inject.Inject;
 import io.bitsquare.btc.BlockChainFacade;
-import io.bitsquare.btc.MockWalletFacade;
+import io.bitsquare.btc.IWalletFacade;
 import io.bitsquare.msg.IMessageFacade;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -26,7 +26,7 @@ public class PaymentProcess
     protected String takerOutputPayment;
 
     protected String multiSigAddress;
-    private MockWalletFacade wallet;
+    private IWalletFacade wallet;
 
     public PaymentProcess()
     {
@@ -39,7 +39,7 @@ public class PaymentProcess
     }
 
     @Inject
-    public void setWallet(MockWalletFacade wallet)
+    public void setWallet(IWalletFacade wallet)
     {
         this.wallet = wallet;
     }
diff --git a/src/main/resources/wallet/checkpoints b/src/main/resources/wallet/checkpoints
new file mode 100644
index 0000000000..bc1b2e5074
Binary files /dev/null and b/src/main/resources/wallet/checkpoints differ