         return didOpenApp
             .map { _ in
                 let userDefaults = UserDefaults.standard
-                let didLaunchBefore = userDefaults.bool(forKey: self.isFirstLaunchKey)
+                let didLaunchBefore = userDefaults.bool(forKey: DefaultName.isFirstLaunch)
                 
                 if didLaunchBefore {
                     return false
                 } else {
-                    userDefaults.set(true, forKey: self.isFirstLaunchKey)
+                    userDefaults.set(true, forKey: DefaultName.isFirstLaunch)
                     userDefaults.synchronize()
                     return true
                 }
-        }
+            }
+            .shareReplay(1)
     }
     
     /**

        return didOpenApp
            .map { _ in
                let userDefaults = UserDefaults.standard
                var count = userDefaults.integer(forKey: self.numDidOpenAppKey)
                count = min(count + 1, Int.max - 1)
                userDefaults.set(count, forKey: self.numDidOpenAppKey)
                userDefaults.synchronize()
                return count
        }
    }
    
    /**

     -returns: Observable sequence of Void
     */
    public var firstLaunchOnly: Observable<Void> {
        return Observable
            .create { observer in
                let userDefaults = UserDefaults.standard
                let didLaunchBefore = userDefaults.bool(forKey: DefaultName.isFirstLaunch)
                
                if !didLaunchBefore {
                    userDefaults.set(true, forKey: DefaultName.isFirstLaunch)
                    userDefaults.synchronize()
                    observer.onNext()
                }
                observer.onCompleted()
                return Disposables.create {}
            }
            .shareReplay(1)
    }
    
}
