diff --git a/scripting-api-1.0/src/main/java/javax/script/ScriptEngineManager.java b/scripting-api-1.0/src/main/java/javax/script/ScriptEngineManager.java
index a4df037..3909a39 100644
--- a/scripting-api-1.0/src/main/java/javax/script/ScriptEngineManager.java
+++ b/scripting-api-1.0/src/main/java/javax/script/ScriptEngineManager.java
@@ -22,7 +22,7 @@
 import java.util.*;
 
 public class ScriptEngineManager {
-	
+
     private final Set engineSpis = new HashSet();
     private final Map<String, ScriptEngineFactory> byName = new HashMap<String, ScriptEngineFactory>();
     private final Map<String, ScriptEngineFactory> registeredByName = new HashMap();
@@ -35,11 +35,11 @@
 	public ScriptEngineManager() {
 		this(Thread.currentThread().getContextClassLoader());
 	}
-	
+
 	public ScriptEngineManager(ClassLoader classLoader) {
         try
         {
-            for (Enumeration factoryResources = classLoader.getResources("META-INF/services/javax.script.ScriptEngineFactory"); 
+            for (Enumeration factoryResources = classLoader.getResources("META-INF/services/javax.script.ScriptEngineFactory");
 				 factoryResources.hasMoreElements();) {
                 URL url = (URL) factoryResources.nextElement();
 				for (String className : getClassNames(url)) {
@@ -59,15 +59,15 @@
 							}
                             engineSpis.add(factory);
                         }
-                    } catch(ClassNotFoundException doNothing) { 
-					} catch(IllegalAccessException doNothing) { 
-					} catch(InstantiationException doNothing) { 
-					} catch(LinkageError doNothing) { 
-					} catch(AnnotationFormatError doNothing) { 
+                    } catch(ClassNotFoundException doNothing) {
+					} catch(IllegalAccessException doNothing) {
+					} catch(InstantiationException doNothing) {
+					} catch(LinkageError doNothing) {
+					} catch(AnnotationFormatError doNothing) {
 					}
                 }
             }
-        } catch(IOException doNothing) { 
+        } catch(IOException doNothing) {
 		}
 	}
 
@@ -79,6 +79,15 @@
         this.globalScope = globalScope;
     }
 
+    // Added JSR 223 API
+    public Bindings getBindings() {
+        return getGlobalScope();
+    }
+
+    public void setBinding(Bindings bindings) {
+        setGlobalScope(bindings);
+    }
+
     public void put(String key, Object value) {
         if (globalScope != null) {
             globalScope.put(key, value);
@@ -214,9 +223,9 @@
 				}
                 stack.push(line.trim());
             }
-        } catch(IOException doNothing) { 
+        } catch(IOException doNothing) {
 		}
         return stack;
     }
 
-}
\ No newline at end of file
+}
