static CGFloat ScreenScale_;
 static NSString *Idiom_;
 
+static NSMutableDictionary *SessionData_;
 static NSObject *HostConfig_;
 static NSMutableSet *BridgedHosts_;
 static NSMutableSet *PipelinedHosts_;
         return @"getInstalledPackages";
     else if (selector == @selector(getPackageById:))
         return @"getPackageById";
+    else if (selector == @selector(getSessionValue:))
+        return @"getSessionValue";
     else if (selector == @selector(installPackages:))
         return @"installPackages";
     else if (selector == @selector(localizedStringForKey:value:table:))
         return @"refreshSources";
     else if (selector == @selector(removeButton))
         return @"removeButton";
+    else if (selector == @selector(setSessionValue::))
+        return @"setSessionValue";
     else if (selector == @selector(substitutePackageNames:))
         return @"substitutePackageNames";
     else if (selector == @selector(scrollToBottom:))
     return [NSString stringWithCString:value];
 }
 
+- (id) getSessionValue:(NSString *)key {
+@synchronized (SessionData_) {
+    return [SessionData_ objectForKey:key];
+} }
+
+- (void) setSessionValue:(NSString *)key :(NSString *)value {
+@synchronized (SessionData_) {
+    if (value == (id) [WebUndefined undefined])
+        [SessionData_ removeObjectForKey:key];
+    else
+        [SessionData_ setObject:value forKey:key];
+} }
+
 - (void) addBridgedHost:(NSString *)host {
 @synchronized (HostConfig_) {
     [BridgedHosts_ addObject:host];
             NSLog(@"unknown UIUserInterfaceIdiom!");
     }
 
+    SessionData_ = [[NSMutableDictionary alloc] initWithCapacity:4];
+
     HostConfig_ = [[NSObject alloc] init];
     @synchronized (HostConfig_) {
         BridgedHosts_ = [NSMutableSet setWithCapacity:4];