diff --git a/libcore/asobj/NetConnection_as.cpp b/libcore/asobj/NetConnection_as.cpp
index 3d56a69..1b3db88 100644
--- a/libcore/asobj/NetConnection_as.cpp
+++ b/libcore/asobj/NetConnection_as.cpp
@@ -476,6 +476,20 @@ NetConnection_as::connect()
 }
 
 
+bool 
+NetConnection_as::isRTMP () {
+
+    const RunResources& r = getRunResources(owner());
+    URL url(_uri, r.streamProvider().baseURL());
+    if (url.protocol() == "rtmp") {
+    
+         return true;
+    } else {
+     
+         return false;
+    }
+}
+
 bool
 NetConnection_as::connect(const std::string& uri)
 {
@@ -576,6 +590,27 @@ NetConnection_as::call(as_object* asCallback, const std::string& methodName,
     startAdvanceTimer();
 }
 
+void
+NetConnection_as::createStream(as_object* asCallback) {
+    
+    if (! this -> isRTMP()) {
+        return;
+    } 
+
+    if (!_currentConnection.get()) {
+        IF_VERBOSE_ASCODING_ERRORS(
+            log_aserror(_("NetConnection.call: can't call while not connected"));
+        );
+        return;
+    }
+   
+    std::string methodName = "createStream"; 
+    _currentConnection -> call(asCallback, methodName,
+		    std::vector<as_value>());
+
+    startAdvanceTimer();
+}
+
 std::auto_ptr<IOChannel>
 NetConnection_as::getStream(const std::string& name)
 {
@@ -588,11 +623,22 @@ NetConnection_as::getStream(const std::string& name)
     // If name is a full or relative URL passed from NetStream.play(), it
     // must be constructed against the base URL, not the NetConnection uri,
     // which should always be null in this case.
+    //  Handling RTMP connections separately. Correcting the url
+    
+    
     const RcInitFile& rcfile = RcInitFile::getDefaultInstance();
-
-    URL url(name, streamProvider.baseURL());
-
-    return streamProvider.getStream(url, rcfile.saveStreamingMedia());
+    
+    if(isRTMP())
+    {
+       std::string rtmpUrl = _uri + "/" + name;
+       URL url(rtmpUrl, streamProvider.baseURL());
+       return streamProvider.getStream(url, rcfile.saveStreamingMedia());
+    }
+    else 
+    { 
+       URL url(name, streamProvider.baseURL());
+       return streamProvider.getStream(url, rcfile.saveStreamingMedia());
+    }
 
 }
 
diff --git a/libcore/asobj/NetConnection_as.h b/libcore/asobj/NetConnection_as.h
index e0baadc..f8de5ad 100644
--- a/libcore/asobj/NetConnection_as.h
+++ b/libcore/asobj/NetConnection_as.h
@@ -71,6 +71,7 @@ public:
     void call(as_object* asCallback, const std::string& methodName,
             const std::vector<as_value>& args);
 
+    void createStream(as_object* asCallback);
     /// Process the close() method.
     void close();
 
@@ -94,6 +95,8 @@ public:
         return _isConnected;
     }
 
+    bool isRTMP();
+
     void setURI(const std::string& uri);
 
     const std::string& getURI() const {
diff --git a/libcore/asobj/NetStream_as.cpp b/libcore/asobj/NetStream_as.cpp
index d04619b..e9ed785 100644
--- a/libcore/asobj/NetStream_as.cpp
+++ b/libcore/asobj/NetStream_as.cpp
@@ -152,6 +152,14 @@ registerNetStreamNative(as_object& global)
 
 }
 
+double
+NetStream_as::getCurrentFPS()
+{
+    //Get the movie root oject and the total frames loaded
+    movie_root& m = getRoot(owner());
+    return (double) m.getRootMovie().frameRate();
+}
+
 void
 NetStream_as::processStatusNotifications()
 {
@@ -1588,6 +1596,7 @@ netstream_new(const fn_call& fn)
 
         NetConnection_as* nc;
         if (isNativeType(toObject(fn.arg(0), getVM(fn)), nc)) {
+            nc->createStream(obj);
             ns->setNetCon(nc);
         }
         else {
@@ -1635,7 +1644,8 @@ as_value
 netstream_play(const fn_call& fn)
 {
     NetStream_as* ns = ensure<ThisIsNative<NetStream_as> >(fn);
-
+    
+  
     if (!fn.nargs) {
         IF_VERBOSE_ASCODING_ERRORS(
             log_aserror(_("NetStream_as play needs args"));
@@ -1650,6 +1660,16 @@ netstream_play(const fn_call& fn)
         );
         return as_value();
     }
+    
+    NetConnection_as *nc = ns -> getNetCon();
+    if (nc -> isRTMP()) {
+        std::vector<as_value> args;
+	args = std::vector<as_value>(fn.getArgs().begin(),
+		fn.getArgs().end());
+	std::string methodName = "play";
+	nc -> call (fn.this_ptr, methodName,
+		args);
+    }
 
     ns->play(fn.arg(0).to_string());
 
diff --git a/libcore/asobj/NetStream_as.h b/libcore/asobj/NetStream_as.h
index 77c636e..1756f06 100644
--- a/libcore/asobj/NetStream_as.h
+++ b/libcore/asobj/NetStream_as.h
@@ -242,8 +242,14 @@ public:
     void update();
     
     /// Returns the current framerate in frames per second.
-    double getCurrentFPS()  { return 0; }
-
+    double getCurrentFPS();
+    
+    /// Get Net connected
+    //  Returns the netconnection object
+    NetConnection_as* getNetCon() {
+         return _netCon;
+    }
+    
     /// Sets the NetConnection needed to access external files
     //
     /// @param nc
diff --git a/testsuite/misc-ming.all/Makefile.am b/testsuite/misc-ming.all/Makefile.am
index 17ea13b..1a1ea2d 100644
--- a/testsuite/misc-ming.all/Makefile.am
+++ b/testsuite/misc-ming.all/Makefile.am
@@ -57,6 +57,7 @@ EXTRA_DIST = \
 	gotoFrame2Test.as \
 	intervalTest.as \
 	red5test.as \
+	oflaDemo.as \
 	remoting.as \
 	rtmpytest.as \
 	widgets.as \
@@ -1327,6 +1328,11 @@ red5test.swf: red5test.as Dejagnu.swf Makefile ../actionscript.all/check.as ../a
 		-DUSE_DEJAGNU_MODULE -DOUTPUT_VERSION=7 Dejagnu.swf $(srcdir)/red5test.as \
 		$(srcdir)/../actionscript.all/dejagnu_so_fini.as
 
+oflaDemo.swf: oflaDemo.as Dejagnu.swf Makefile ../actionscript.all/check.as ../actionscript.all/utils.as
+	$(MAKESWF) $(MAKESWF_FLAGS) -n network -r12 -o $@ -v7 -DRED5_HOST='\"$(RED5_HOST)\"' \
+		-DUSE_DEJAGNU_MODULE -DOUTPUT_VERSION=7 Dejagnu.swf $(srcdir)/oflaDemo.as \
+		$(srcdir)/../actionscript.all/dejagnu_so_fini.as
+
 red5test-runner: $(srcdir)/../generic-testrunner.sh red5test.swf
 	sh $(srcdir)/../generic-testrunner.sh -c "ENDOFTEST" $(top_builddir) red5test.swf > $@
 	chmod 755 $@
