diff --git a/ethpipe/config.go b/ethpipe/config.go
index 5e57416d7..66708b26e 100644
--- a/ethpipe/config.go
+++ b/ethpipe/config.go
@@ -15,6 +15,11 @@ func (self *Config) Get(name string) *Object {
 	switch name {
 	case "NameReg":
 		addr = []byte{0}
+	case "DomainReg":
+		objectAddr := configCtrl.GetStorage(ethutil.BigD([]byte{0}))
+		domainAddr := (&Object{self.pipe.World().safeGet(objectAddr.Bytes())}).StorageString("DomainReg").Bytes()
+
+		return &Object{self.pipe.World().safeGet(domainAddr)}
 	default:
 		addr = ethutil.RightPadBytes([]byte(name), 32)
 	}
diff --git a/ethpub/pub.go b/ethpub/pub.go
index f971313d8..3fb4c4920 100644
--- a/ethpub/pub.go
+++ b/ethpub/pub.go
@@ -10,6 +10,7 @@ import (
 	"github.com/ethereum/eth-go/ethchain"
 	"github.com/ethereum/eth-go/ethcrypto"
 	"github.com/ethereum/eth-go/ethlog"
+	"github.com/ethereum/eth-go/ethpipe"
 	"github.com/ethereum/eth-go/ethstate"
 	"github.com/ethereum/eth-go/ethutil"
 )
@@ -41,6 +42,7 @@ func (self helper) NameReg() *ethstate.StateObject {
 	return nil
 }
 
+// TODO Re-write / refactor
 type PEthereum struct {
 	manager      ethchain.EthManager
 	stateManager *ethchain.StateManager
@@ -65,6 +67,17 @@ func New(manager ethchain.EthManager) *PEthereum {
 	}
 }
 
+func (self *PEthereum) LookupDomain(domain string) string {
+	pipe := ethpipe.New(self.manager)
+	world := pipe.World()
+
+	if len(domain) > 32 {
+		domain = string(ethcrypto.Sha3Bin([]byte(domain)))
+	}
+
+	return strings.Trim(world.Config().Get("DomainReg").StorageString(domain).Str(), "\x00")
+}
+
 func (lib *PEthereum) GetBlock(hexHash string) *PBlock {
 	hash := ethutil.Hex2Bytes(hexHash)
 	block := lib.blockChain.GetBlock(hash)
diff --git a/peer.go b/peer.go
index fa683e488..bd20bb2b9 100644
--- a/peer.go
+++ b/peer.go
@@ -449,7 +449,7 @@ func (p *Peer) HandleInbound() {
 						peerlogger.Infof("Attempting to catch (%x). Parent unknown\n", b.Hash())
 						p.catchingUp = false
 
-						p.CatchupWithPeer(b.Hash())
+						p.CatchupWithPeer(b.PrevHash)
 
 						peerlogger.Infoln(b)