diff --git a/memmap.go b/memmap.go
index e8e7824..3cfec11 100644
--- a/memmap.go
+++ b/memmap.go
@@ -27,7 +27,7 @@
 )
 
 type MemMapFs struct {
-	sync.RWMutex
+	mu   sync.RWMutex
 	data map[string]File
 	init sync.Once
 }
@@ -48,11 +48,11 @@
 
 func (m *MemMapFs) Create(name string) (File, error) {
 	name = normalizePath(name)
-	m.Lock()
+	m.mu.Lock()
 	file := mem.CreateFile(name)
 	m.getData()[name] = file
 	m.registerWithParent(file)
-	m.Unlock()
+	m.mu.Unlock()
 	return file, nil
 }
 
@@ -135,9 +135,9 @@
 func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
 	name = normalizePath(name)
 
-	m.RLock()
+	m.mu.RLock()
 	x, ok := m.getData()[name]
-	m.RUnlock()
+	m.mu.RUnlock()
 	if ok {
 		// Only return ErrFileExists if it's a file, not a directory.
 		i, err := x.Stat()
@@ -148,11 +148,11 @@
 			return err
 		}
 	} else {
-		m.Lock()
+		m.mu.Lock()
 		item := mem.CreateDir(name)
 		m.getData()[name] = item
 		m.registerWithParent(item)
-		m.Unlock()
+		m.mu.Unlock()
 	}
 	return nil
 }
@@ -178,14 +178,14 @@
 func (m *MemMapFs) Open(name string) (File, error) {
 	name = normalizePath(name)
 
-	m.RLock()
+	m.mu.RLock()
 	f, ok := m.getData()[name]
 	ff, ok := f.(*mem.File)
 
 	if ok {
 		ff.Open()
 	}
-	m.RUnlock()
+	m.mu.RUnlock()
 
 	if ok {
 		return f, nil
@@ -236,8 +236,8 @@
 func (m *MemMapFs) Remove(name string) error {
 	name = normalizePath(name)
 
-	m.Lock()
-	defer m.Unlock()
+	m.mu.Lock()
+	defer m.mu.Unlock()
 
 	if _, ok := m.getData()[name]; ok {
 		m.unRegisterWithParent(name)
@@ -250,20 +250,20 @@
 
 func (m *MemMapFs) RemoveAll(path string) error {
 	path = normalizePath(path)
-	m.Lock()
+	m.mu.Lock()
 	m.unRegisterWithParent(path)
-	m.Unlock()
+	m.mu.Unlock()
 
-	m.RLock()
-	defer m.RUnlock()
+	m.mu.RLock()
+	defer m.mu.RUnlock()
 
 	for p, _ := range m.getData() {
 		if strings.HasPrefix(p, path) {
-			m.RUnlock()
-			m.Lock()
+			m.mu.RUnlock()
+			m.mu.Lock()
 			delete(m.getData(), p)
-			m.Unlock()
-			m.RLock()
+			m.mu.Unlock()
+			m.mu.RLock()
 		}
 	}
 	return nil
@@ -277,20 +277,20 @@
 		return nil
 	}
 
-	m.RLock()
-	defer m.RUnlock()
+	m.mu.RLock()
+	defer m.mu.RUnlock()
 	if _, ok := m.getData()[oldname]; ok {
 		if _, ok := m.getData()[newname]; !ok {
-			m.RUnlock()
-			m.Lock()
+			m.mu.RUnlock()
+			m.mu.Lock()
 			m.unRegisterWithParent(oldname)
 			file := m.getData()[oldname].(*mem.File)
 			delete(m.getData(), oldname)
 			mem.ChangeFileName(file, newname)
 			m.getData()[newname] = file
 			m.registerWithParent(file)
-			m.Unlock()
-			m.RLock()
+			m.mu.Unlock()
+			m.mu.RLock()
 		} else {
 			return ErrDestinationExists
 		}
@@ -318,9 +318,9 @@
 
 	ff, ok := f.(*mem.File)
 	if ok {
-		m.Lock()
+		m.mu.Lock()
 		mem.SetMode(ff, mode)
-		m.Unlock()
+		m.mu.Unlock()
 	} else {
 		return errors.New("Unable to Chmod Memory File")
 	}
@@ -336,9 +336,9 @@
 
 	ff, ok := f.(*mem.File)
 	if ok {
-		m.Lock()
+		m.mu.Lock()
 		mem.SetModTime(ff, mtime)
-		m.Unlock()
+		m.mu.Unlock()
 	} else {
 		return errors.New("Unable to Chtime Memory File")
 	}
