diff --git a/globals/version_vars.go b/globals/version_vars.go
index 0dfeae1a2d0a9b61489927fc03909225057c4d4e..2d5f5965e131c99b9dd84f10c73c7307f8f88741 100644
--- a/globals/version_vars.go
+++ b/globals/version_vars.go
@@ -1,9 +1,9 @@
 // Code generated by go generate; DO NOT EDIT.
 // This file was generated by robots at
-// 2020-09-25 11:48:25.820720385 -0700 PDT m=+0.003677797
+// 2020-11-09 13:57:29.571995 -0800 PST m=+0.022551937
 package globals
 
-const GITVERSION = `a6830b5 Fix import issue`
+const GITVERSION = `4adb5fe made skeleton for remove fact`
 const SEMVER = "1.4.0"
 const DEPENDENCIES = `module gitlab.com/elixxir/client
 
@@ -11,20 +11,29 @@ go 1.13
 
 require (
 	github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3
-	github.com/golang/protobuf v1.4.2
+	github.com/golang/protobuf v1.4.3
+	github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
+	github.com/magiconair/properties v1.8.4 // indirect
+	github.com/mitchellh/mapstructure v1.3.3 // indirect
+	github.com/pelletier/go-toml v1.8.1 // indirect
 	github.com/pkg/errors v0.9.1
+	github.com/smartystreets/assertions v1.0.1 // indirect
+	github.com/spf13/afero v1.4.0 // indirect
+	github.com/spf13/cast v1.3.1 // indirect
 	github.com/spf13/cobra v1.0.0
 	github.com/spf13/jwalterweatherman v1.1.0
-	github.com/spf13/viper v1.6.2
-	gitlab.com/elixxir/comms v0.0.0-20200925154004-716284cff8cb
-	gitlab.com/elixxir/crypto v0.0.0-20200921195205-bca0178268ec
-	gitlab.com/elixxir/ekv v0.1.2-0.20200917221437-9f9630da030a
-	gitlab.com/elixxir/primitives v0.0.0-20200915190719-f4586ec93f50
-	gitlab.com/xx_network/comms v0.0.0-20200925163950-5686bc0f8ab0
-	gitlab.com/xx_network/crypto v0.0.0-20200812183430-c77a5281c686
-	gitlab.com/xx_network/primitives v0.0.0-20200812183720-516a65a4a9b2
-	golang.org/x/sys v0.0.0-20200918174421-af09f7315aff // indirect
+	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/spf13/viper v1.7.1
+	gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30
+	gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e
+	gitlab.com/elixxir/ekv v0.1.3
+	gitlab.com/elixxir/primitives v0.0.2
+	gitlab.com/xx_network/comms v0.0.3
+	gitlab.com/xx_network/crypto v0.0.4
+	gitlab.com/xx_network/primitives v0.0.2
+	golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
 	google.golang.org/protobuf v1.25.0
+	gopkg.in/ini.v1 v1.61.0 // indirect
 )
 
 replace google.golang.org/grpc => github.com/grpc/grpc-go v1.27.1
diff --git a/go.mod b/go.mod
index 1177dcbb6658f3da6581743754b578ed32ec1353..dc769078af0a2987c147efb427caa1459c8935a6 100644
--- a/go.mod
+++ b/go.mod
@@ -17,8 +17,8 @@ require (
 	github.com/spf13/jwalterweatherman v1.1.0
 	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/spf13/viper v1.7.1
-	gitlab.com/elixxir/comms v0.0.3
-	gitlab.com/elixxir/crypto v0.0.4
+	gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30
+	gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e
 	gitlab.com/elixxir/ekv v0.1.3
 	gitlab.com/elixxir/primitives v0.0.2
 	gitlab.com/xx_network/comms v0.0.3
diff --git a/go.sum b/go.sum
index cd8869a5b9d411cf1dd2f18b80a8e62273872a87..d9ae59910cd23ec3a10019a0dc42c501e1cd8164 100644
--- a/go.sum
+++ b/go.sum
@@ -250,14 +250,16 @@ github.com/zeebo/pcg v0.0.0-20181207190024-3cdc6b625a05 h1:4pW5fMvVkrgkMXdvIsVRR
 github.com/zeebo/pcg v0.0.0-20181207190024-3cdc6b625a05/go.mod h1:Gr+78ptB0MwXxm//LBaEvBiaXY7hXJ6KGe2V32X2F6E=
 github.com/zeebo/pcg v1.0.0 h1:dt+dx+HvX8g7Un32rY9XWoYnd0NmKmrIzpHF7qiTDj0=
 github.com/zeebo/pcg v1.0.0/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4=
-gitlab.com/elixxir/comms v0.0.3 h1:7cFvBZddX/8JSY5MvfPpg21niV88IpeqQkoKs15erZM=
-gitlab.com/elixxir/comms v0.0.3/go.mod h1:5p7oz4yFrK037rPap6ooaWrloJrzuVZ4jnzOdvgyqnU=
+gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30 h1:9q+xVbu5m7XDvT1CVz8s1S/SOVpasWJOx7V/3rAY/pE=
+gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30/go.mod h1:5p7oz4yFrK037rPap6ooaWrloJrzuVZ4jnzOdvgyqnU=
 gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A=
 gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c=
 gitlab.com/elixxir/crypto v0.0.3 h1:znCt/x2bL4y8czTPaaFkwzdgSgW3BJc/1+dxyf1jqVw=
 gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
 gitlab.com/elixxir/crypto v0.0.4 h1:8eWjvUepCU2PiqZM2NFYo6rFg1w8KWO1hMDwMNFEqoI=
 gitlab.com/elixxir/crypto v0.0.4/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
+gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e h1:rkT8Pzjgo9oF3uS8ExHGNUQoJX/22qK3lU+vU8QsOCY=
+gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
 gitlab.com/elixxir/ekv v0.1.3 h1:OE+LBMIhjGUMwc6hHJzYvEPNJQV7t1vMnJyIgxUMUo8=
 gitlab.com/elixxir/ekv v0.1.3/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4=
 gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg=
diff --git a/network/message/parse/firstMessagePart_test.go b/network/message/parse/firstMessagePart_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..e1e7e692621e7251703695ac7c37861dfc18c830
--- /dev/null
+++ b/network/message/parse/firstMessagePart_test.go
@@ -0,0 +1,34 @@
+package parse
+
+import (
+	"bytes"
+	"gitlab.com/elixxir/client/interfaces/message"
+	"testing"
+	"time"
+)
+
+func TestnewFirstMessagePart(t *testing.T) {
+	now := time.Now()
+	fmp := newFirstMessagePart(message.Text, uint32(6), uint8(2), now,
+		[]byte{'t', 'e', 's', 't', 'i', 'n', 'g'})
+
+	if fmp.GetType() != message.Text {
+
+	}
+
+	if fmp.GetNumParts() != uint8(2) {
+
+	}
+
+	recorded_now, err := fmp.GetTimestamp()
+	if err != nil {
+		t.Fatal(err)
+	}
+	if recorded_now != now {
+
+	}
+
+	if !bytes.Equal(fmp.Bytes(), []byte{'t', 'e', 's', 't', 'i', 'n', 'g'}) {
+
+	}
+}
diff --git a/ud/manager.go b/ud/manager.go
index 60084fc28f278f4cfb9baeb21afe5a7da152ffa2..697d229dd965aa9662afbc70ee7ac9747852f8d3 100644
--- a/ud/manager.go
+++ b/ud/manager.go
@@ -3,11 +3,12 @@ package ud
 import (
 	"gitlab.com/elixxir/comms/client"
 	"gitlab.com/xx_network/comms/connect"
+	"gitlab.com/xx_network/crypto/signature/rsa"
 )
 
-type Manager struct{
-	comms *client.Comms
-	host *connect.Host
+type Manager struct {
+	comms   *client.Comms
+	host    *connect.Host
+	privKey *rsa.PrivateKey
 }
 
-
diff --git a/ud/remove.go b/ud/remove.go
index c4ce15cfc31ec88c8b5a271811ffabd3bde3a624..a3895ae0a4e68ce0c4ae70ed78b7cdc9dd97cb8c 100644
--- a/ud/remove.go
+++ b/ud/remove.go
@@ -1,33 +1,70 @@
 package ud
 
 import (
+	"crypto/rand"
+	"github.com/golang/protobuf/proto"
+	"github.com/golang/protobuf/ptypes/any"
 	"gitlab.com/elixxir/client/interfaces/contact"
+	"gitlab.com/elixxir/comms/mixmessages"
+	"gitlab.com/elixxir/crypto/hash"
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/comms/messages"
+	"gitlab.com/xx_network/crypto/signature/rsa"
 )
 
-
-type removeFactComms interface{
-	SendDeleteMessage(host *connect.Host, message *messages.AuthenticatedMessage)(*messages.Ack, error)
+type removeFactComms interface {
+	SendDeleteMessage(host *connect.Host, message *messages.AuthenticatedMessage) (*messages.Ack, error)
 }
 
-func (m *Manager)RemoveFact(fact contact.Fact)error{
-	return nil//m.removeFact(fact,m.comms)
+func (m *Manager) RemoveFact(fact contact.Fact) error {
+	return m.removeFact(fact, m.comms)
 }
 
-func (m *Manager)removeFact(fact contact.Fact, SendDeleteMessage removeFactComms)error {
-	//digest the fact
-	fact.Stringify()
-	//sign the fact
-	//rsa.Sign()
+func (m *Manager) removeFact(fact contact.Fact, rFC removeFactComms) error {
+	// Construct the message to send
+	// Convert our Fact to a mixmessages Fact for sending
+	mmFact := mixmessages.Fact{
+		Fact:     fact.Fact,
+		FactType: uint32(fact.T),
+	}
 
-	//constuct the message
+	// Sign the fact
+	signedFact, err := rsa.Sign(rand.Reader, m.privKey, hash.CMixHash, mmFact.Digest(), rsa.NewDefaultOptions())
+	if err != nil {
+		return err
+	}
 
+	// Create our Fact Removal Request message data
+	remFactMsg := mixmessages.FactRemovalRequest{
+		UID:         m.host.GetId().Marshal(),
+		RemovalData: &mmFact,
+	}
 
-	//send the message
+	// Marshal it to bytes for sending over the wire
+	remFactMsgMarshalled, err := proto.Marshal(&remFactMsg)
+	if err != nil {
+		return err
+	}
 
-	//return the error
+	// Convert our marshalled Fact Removal Request to an Any
+	// object for sending in an authed message
+	remFactMsgAny := any.Any{
+		TypeUrl: "gitlab.com/elixxir/client/interfaces/contact.Fact",
+		Value:   remFactMsgMarshalled,
+	}
 
+	// Create our AuthenticatedMessage so we can send the data over
+	msg := messages.AuthenticatedMessage{
+		ID:        nil,
+		Signature: signedFact,
+		Token:     nil,
+		Client:    nil,
+		Message:   &remFactMsgAny,
+	}
 
+	// Send the message
+	_, err = rFC.SendDeleteMessage(m.host, &msg)
 
+	// Return the error
+	return err
 }
diff --git a/ud/remove_test.go b/ud/remove_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..7ec08c4e28542cb036e2e9c78afe6e5d39314b39
--- /dev/null
+++ b/ud/remove_test.go
@@ -0,0 +1,74 @@
+package ud
+
+import (
+	"gitlab.com/elixxir/client/interfaces/contact"
+	"gitlab.com/elixxir/comms/client"
+	"gitlab.com/elixxir/crypto/cyclic"
+	"gitlab.com/xx_network/comms/connect"
+	"gitlab.com/xx_network/comms/messages"
+	"gitlab.com/xx_network/crypto/csprng"
+	"gitlab.com/xx_network/crypto/large"
+	"gitlab.com/xx_network/crypto/signature/rsa"
+	"gitlab.com/xx_network/primitives/id"
+	"testing"
+)
+
+var genericGroup = cyclic.NewGroup(
+	large.NewIntFromString("9DB6FB5951B66BB6FE1E140F1D2CE5502374161FD6538DF1648218642F0B5C48"+
+		"C8F7A41AADFA187324B87674FA1822B00F1ECF8136943D7C55757264E5A1A44F"+
+		"FE012E9936E00C1D3E9310B01C7D179805D3058B2A9F4BB6F9716BFE6117C6B5"+
+		"B3CC4D9BE341104AD4A80AD6C94E005F4B993E14F091EB51743BF33050C38DE2"+
+		"35567E1B34C3D6A5C0CEAA1A0F368213C3D19843D0B4B09DCB9FC72D39C8DE41"+
+		"F1BF14D4BB4563CA28371621CAD3324B6A2D392145BEBFAC748805236F5CA2FE"+
+		"92B871CD8F9C36D3292B5509CA8CAA77A2ADFC7BFD77DDA6F71125A7456FEA15"+
+		"3E433256A2261C6A06ED3693797E7995FAD5AABBCFBE3EDA2741E375404AE25B", 16),
+	large.NewIntFromString("5C7FF6B06F8F143FE8288433493E4769C4D988ACE5BE25A0E24809670716C613"+
+		"D7B0CEE6932F8FAA7C44D2CB24523DA53FBE4F6EC3595892D1AA58C4328A06C4"+
+		"6A15662E7EAA703A1DECF8BBB2D05DBE2EB956C142A338661D10461C0D135472"+
+		"085057F3494309FFA73C611F78B32ADBB5740C361C9F35BE90997DB2014E2EF5"+
+		"AA61782F52ABEB8BD6432C4DD097BC5423B285DAFB60DC364E8161F4A2A35ACA"+
+		"3A10B1C4D203CC76A470A33AFDCBDD92959859ABD8B56E1725252D78EAC66E71"+
+		"BA9AE3F1DD2487199874393CD4D832186800654760E1E34C09E4D155179F9EC0"+
+		"DC4473F996BDCE6EED1CABED8B6F116F7AD9CF505DF0F998E34AB27514B0FFE7", 16))
+
+type testRFC struct{}
+
+func (rFC *testRFC) SendDeleteMessage(host *connect.Host, message *messages.AuthenticatedMessage) (*messages.Ack, error) {
+	return &messages.Ack{}, nil
+}
+
+func TestRemoveFact(t *testing.T) {
+	c, err := client.NewClientComms(&id.DummyUser, nil, nil, nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	h, err := connect.NewHost(&id.DummyUser, "address", nil, connect.GetDefaultHostParams())
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	rng := csprng.NewSystemRNG()
+	cpk, err := rsa.GenerateKey(rng, 2048)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	m := Manager{
+		comms:   c,
+		host:    h,
+		privKey: cpk,
+	}
+
+	f := contact.Fact{
+		Fact: "testing",
+		T:    2,
+	}
+
+	trfc := testRFC{}
+
+	err = m.removeFact(f, &trfc)
+	if err != nil {
+		t.Fatal(err)
+	}
+}