diff --git a/lib/fmj.jar b/lib/fmj.jar
index 03d23a97d9e397999dab4bdf3ff5619b24a83d4b..2c9c69913dc13e1413f788cdfd4d035f96d9ce22 100644
Binary files a/lib/fmj.jar and b/lib/fmj.jar differ
diff --git a/lib/native/mac/libjnquicktime.jnilib b/lib/native/mac/libjnquicktime.jnilib
index 72f4d6953df8fa8d0deadc21341169fe326a4642..6ad0945456facae9ea57eba402c5bf106c20f194 100755
Binary files a/lib/native/mac/libjnquicktime.jnilib and b/lib/native/mac/libjnquicktime.jnilib differ
diff --git a/src/native/macosx/quicktime/common.h b/src/native/macosx/quicktime/common.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8cecb31c9587f178ca592767aebf7b8a009dc29
--- /dev/null
+++ b/src/native/macosx/quicktime/common.h
@@ -0,0 +1,16 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#ifndef _IMPL_NEOMEDIA_QUICKTIME_COMMON_H_
+#define _IMPL_NEOMEDIA_QUICKTIME_COMMON_H_
+
+#import <Foundation/NSObject.h>
+#import <Foundation/NSString.h>
+
+id NSObject_performSelector(id obj, NSString *selectorName);
+
+#endif /* _IMPL_NEOMEDIA_QUICKTIME_COMMON_H_ */
diff --git a/src/native/macosx/quicktime/common.m b/src/native/macosx/quicktime/common.m
new file mode 100644
index 0000000000000000000000000000000000000000..134f5979822d0adf6699018eda537c652bf0c303
--- /dev/null
+++ b/src/native/macosx/quicktime/common.m
@@ -0,0 +1,27 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "common.h"
+
+#import <Foundation/NSAutoreleasePool.h>
+#import <Foundation/NSObject.h> /* NSSelectorFromString */
+#import <Foundation/NSString.h>
+
+id NSObject_performSelector(id obj, NSString *selectorName)
+{
+    NSAutoreleasePool *autoreleasePool;
+    SEL selector;
+    id ret;
+
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    selector = NSSelectorFromString(selectorName);
+    ret = [obj performSelector:selector];
+
+    [autoreleasePool release];
+    return ret;
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h
new file mode 100644
index 0000000000000000000000000000000000000000..ccc1614d27015b816d35c86d72e197636aa6f4ef
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h
@@ -0,0 +1,68 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_CVPixelBuffer */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer
+#define _Included_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBuffer
+ * Method:    getByteCount
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getByteCount
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBuffer
+ * Method:    getBytes
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getBytes__J
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBuffer
+ * Method:    getBytes
+ * Signature: (JJI)I
+ */
+JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getBytes__JJI
+  (JNIEnv *, jclass, jlong, jlong, jint);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBuffer
+ * Method:    getHeight
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getHeight
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBuffer
+ * Method:    getWidth
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getWidth
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBuffer
+ * Method:    memcpy
+ * Signature: ([BIIJ)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_memcpy
+  (JNIEnv *, jclass, jbyteArray, jint, jint, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.m
new file mode 100644
index 0000000000000000000000000000000000000000..3188277dd91ccb52b790c6007390561667b76102
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.m
@@ -0,0 +1,190 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h"
+
+#import <CoreVideo/CVPixelBuffer.h>
+#include <stdint.h>
+#include <string.h>
+
+static size_t
+CVPixelBuffer_getByteCount(CVPixelBufferRef pixelBuffer, size_t planeCount)
+{
+    size_t byteCount;
+
+    if (planeCount)
+    {
+        size_t planeIndex;
+
+        byteCount = 0;
+        for (planeIndex = 0; planeIndex < planeCount; planeIndex++)
+        {
+            byteCount
+                += CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, planeIndex)
+                    * CVPixelBufferGetHeightOfPlane(pixelBuffer, planeIndex);
+        }
+    }
+    else
+    {
+        byteCount
+            = CVPixelBufferGetBytesPerRow(pixelBuffer)
+                * CVPixelBufferGetHeight(pixelBuffer);
+    }
+    return byteCount;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getByteCount
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    CVPixelBufferRef pixelBuffer;
+    size_t planeCount;
+
+    pixelBuffer = (CVPixelBufferRef) (intptr_t) ptr;
+
+    planeCount = CVPixelBufferGetPlaneCount(pixelBuffer);
+    return (jint) CVPixelBuffer_getByteCount(pixelBuffer, planeCount);
+}
+
+JNIEXPORT jbyteArray JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getBytes__J
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    CVPixelBufferRef pixelBuffer;
+    size_t planeCount;
+    size_t byteCount;
+    jbyteArray bytes;
+
+    pixelBuffer = (CVPixelBufferRef) (intptr_t) ptr;
+
+    planeCount = CVPixelBufferGetPlaneCount(pixelBuffer);
+    byteCount = CVPixelBuffer_getByteCount(pixelBuffer, planeCount);
+    bytes = (*jniEnv)->NewByteArray(jniEnv, byteCount);
+    if (!bytes)
+        return NULL;
+
+    if (kCVReturnSuccess == CVPixelBufferLockBaseAddress(pixelBuffer, 0))
+    {
+        jbyte *cBytes;
+
+        if (planeCount)
+        {
+            size_t byteOffset;
+            size_t planeIndex;
+
+            byteOffset = 0;
+            for (planeIndex = 0; planeIndex < planeCount; planeIndex++)
+            {
+                cBytes
+                    = CVPixelBufferGetBaseAddressOfPlane(
+                        pixelBuffer,
+                        planeIndex);
+                byteCount
+                    += CVPixelBufferGetBytesPerRowOfPlane(
+                            pixelBuffer,
+                            planeIndex)
+                        * CVPixelBufferGetHeightOfPlane(
+                                pixelBuffer,
+                                planeIndex);
+                (*jniEnv)
+                    ->SetByteArrayRegion(
+                        jniEnv,
+                        bytes,
+                        byteOffset,
+                        byteCount,
+                        cBytes);
+                byteOffset += byteCount;
+            }
+        }
+        else
+        {
+            cBytes = CVPixelBufferGetBaseAddress(pixelBuffer);
+            (*jniEnv)->SetByteArrayRegion(jniEnv, bytes, 0, byteCount, cBytes);
+        }
+        CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
+    }
+    return bytes;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getBytes__JJI
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong buf, jint bufLength)
+{
+    CVPixelBufferRef pixelBuffer;
+    size_t byteCount;
+
+    pixelBuffer = (CVPixelBufferRef) (intptr_t) ptr;
+
+    if (kCVReturnSuccess == CVPixelBufferLockBaseAddress(pixelBuffer, 0))
+    {
+        size_t planeCount;
+        jbyte *cBytes;
+
+        planeCount = CVPixelBufferGetPlaneCount(pixelBuffer);
+        byteCount = CVPixelBuffer_getByteCount(pixelBuffer, planeCount);
+
+        if (planeCount)
+        {
+            size_t byteOffset;
+            size_t planeIndex;
+
+            byteOffset = 0;
+            for (planeIndex = 0; planeIndex < planeCount; planeIndex++)
+            {
+                cBytes
+                    = CVPixelBufferGetBaseAddressOfPlane(
+                        pixelBuffer,
+                        planeIndex);
+                byteCount
+                    += CVPixelBufferGetBytesPerRowOfPlane(
+                            pixelBuffer,
+                            planeIndex)
+                        * CVPixelBufferGetHeightOfPlane(
+                                pixelBuffer,
+                                planeIndex);
+                memcpy((void *) (intptr_t) buf, (const void *) cBytes, byteCount);
+                byteOffset += byteCount;
+            }
+            byteCount = byteOffset;
+        }
+        else
+        {
+            cBytes = CVPixelBufferGetBaseAddress(pixelBuffer);
+            memcpy((void *) (intptr_t) buf, (const void *) cBytes, byteCount);
+        }
+        CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
+    }
+    else
+        byteCount = 0;
+    return byteCount;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getHeight
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    return (jint) CVPixelBufferGetHeight((CVPixelBufferRef) (intptr_t) ptr);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getWidth
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    return (jint) CVPixelBufferGetWidth((CVPixelBufferRef) (intptr_t) ptr);
+}
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_memcpy
+    (JNIEnv *jniEnv, jclass clazz,
+        jbyteArray dst, jint dstOffset, jint dstLength,
+        jlong src)
+{
+    (*jniEnv)->SetByteArrayRegion(
+            jniEnv,
+            dst, dstOffset, dstLength,
+            (jbyte *) (intptr_t) src);
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h
new file mode 100644
index 0000000000000000000000000000000000000000..9302833612dd8ede73c9fcc3a2347940139d98a0
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h
@@ -0,0 +1,44 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey
+#define _Included_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey
+ * Method:    kCVPixelBufferHeightKey
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferHeightKey
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey
+ * Method:    kCVPixelBufferPixelFormatTypeKey
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferPixelFormatTypeKey
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey
+ * Method:    kCVPixelBufferWidthKey
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferWidthKey
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m
new file mode 100644
index 0000000000000000000000000000000000000000..b1324fd8602fb7fe8bc52801bace40be55fcd24f
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m
@@ -0,0 +1,32 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h"
+
+#import <CoreVideo/CVPixelBuffer.h>
+#include <stdint.h>
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferHeightKey
+    (JNIEnv *jniEnv, jclass clazz)
+{
+    return (jlong) (intptr_t) kCVPixelBufferHeightKey;
+}
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferPixelFormatTypeKey
+    (JNIEnv *jniEnv, jclass clazz)
+{
+    return (jlong) (intptr_t) kCVPixelBufferPixelFormatTypeKey;
+}
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferWidthKey
+    (JNIEnv *jniEnv, jclass clazz)
+{
+    return (jlong) (intptr_t) kCVPixelBufferWidthKey;
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.h
new file mode 100644
index 0000000000000000000000000000000000000000..6761c1d4a81227a6c97a62ab9a1fd79af7511745
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.h
@@ -0,0 +1,28 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_NSDictionary */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_NSDictionary
+#define _Included_org_jitsi_impl_neomedia_quicktime_NSDictionary
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_NSDictionary
+ * Method:    intForKey
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSDictionary_intForKey
+  (JNIEnv *, jclass, jlong, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.m
new file mode 100644
index 0000000000000000000000000000000000000000..162e4358c1ac35f809b662c29c88bcfda08f5e46
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.m
@@ -0,0 +1,32 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_NSDictionary.h"
+
+#import <Foundation/NSAutoreleasePool.h>
+#import <Foundation/NSDictionary.h>
+#import <Foundation/NSValue.h>
+#include <stdint.h>
+
+JNIEXPORT jint JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_NSDictionary_intForKey
+  (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong key)
+{
+    NSDictionary *dictionary;
+    NSAutoreleasePool *autoreleasePool;
+    NSNumber *value;
+    jint jvalue;
+
+    dictionary = (NSDictionary *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    value = [dictionary objectForKey:(id)(intptr_t)key];
+    jvalue = value ? [value intValue] : 0;
+
+    [autoreleasePool release];
+    return jvalue;
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h
new file mode 100644
index 0000000000000000000000000000000000000000..ec8da40c1270b903486c3e06a06653969545750a
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h
@@ -0,0 +1,36 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_NSMutableDictionary */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary
+#define _Included_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_NSMutableDictionary
+ * Method:    allocAndInit
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary_allocAndInit
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_NSMutableDictionary
+ * Method:    setIntForKey
+ * Signature: (JIJ)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary_setIntForKey
+  (JNIEnv *, jclass, jlong, jint, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.m
new file mode 100644
index 0000000000000000000000000000000000000000..fc6e9b2c13a802051b783b207c33133004462268
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.m
@@ -0,0 +1,43 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h"
+
+#import <Foundation/NSAutoreleasePool.h>
+#import <Foundation/NSDictionary.h>
+#import <Foundation/NSValue.h>
+#include <stdint.h>
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary_allocAndInit
+    (JNIEnv *jniEnv, jclass clazz)
+{
+    NSAutoreleasePool *autoreleasePool;
+    NSMutableDictionary *mutableDictionary;
+
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    mutableDictionary = [[NSMutableDictionary alloc] init];
+
+    [autoreleasePool release];
+    return (jlong) (intptr_t) mutableDictionary;
+}
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary_setIntForKey
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr, jint value, jlong key)
+{
+    NSMutableDictionary *mutableDictionary;
+    NSAutoreleasePool *autoreleasePool;
+
+    mutableDictionary = (NSMutableDictionary *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    [mutableDictionary setObject:[NSNumber numberWithInt:value] forKey:(id)(intptr_t)key];
+
+    [autoreleasePool release];
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.h
new file mode 100644
index 0000000000000000000000000000000000000000..1c49207878d35288f828a594849d9ecbf34e8c72
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.h
@@ -0,0 +1,36 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_NSObject */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_NSObject
+#define _Included_org_jitsi_impl_neomedia_quicktime_NSObject
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_NSObject
+ * Method:    release
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSObject_release
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_NSObject
+ * Method:    retain
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSObject_retain
+  (JNIEnv *, jclass, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.m
new file mode 100644
index 0000000000000000000000000000000000000000..7bfce652f2ebcb766fdbaf97856297146c1dbef2
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.m
@@ -0,0 +1,25 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_NSObject.h"
+
+#include "common.h"
+#include <stdint.h>
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_NSObject_release
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    NSObject_performSelector((id) (intptr_t) ptr, @"release");
+}
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_NSObject_retain
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    NSObject_performSelector((id) (intptr_t) ptr, @"retain");
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h
new file mode 100644
index 0000000000000000000000000000000000000000..6d61b20ab4d4bb5338e77b4b55c02ada4398682f
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h
@@ -0,0 +1,69 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+#define _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+ * Method:    allocAndInit
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_allocAndInit
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+ * Method:    minimumVideoFrameInterval
+ * Signature: (J)D
+ */
+JNIEXPORT jdouble JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_minimumVideoFrameInterval
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+ * Method:    pixelBufferAttributes
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_pixelBufferAttributes
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+ * Method:    setAutomaticallyDropsLateVideoFrames
+ * Signature: (JZ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setAutomaticallyDropsLateVideoFrames
+  (JNIEnv *, jclass, jlong, jboolean);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+ * Method:    setDelegate
+ * Signature: (JLorg/jitsi/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput/Delegate;)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setDelegate
+  (JNIEnv *, jclass, jlong, jobject);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+ * Method:    setMinimumVideoFrameInterval
+ * Signature: (JD)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setMinimumVideoFrameInterval
+  (JNIEnv *, jclass, jlong, jdouble);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput
+ * Method:    setPixelBufferAttributes
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setPixelBufferAttributes
+  (JNIEnv *, jclass, jlong, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m
new file mode 100644
index 0000000000000000000000000000000000000000..e15f1e07989c92a7fc2960fc94f4b78f22179e98
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m
@@ -0,0 +1,262 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h"
+
+#import <CoreVideo/CVImageBuffer.h>
+#import <Foundation/NSAutoreleasePool.h>
+#import <Foundation/NSDictionary.h>
+#import <Foundation/NSObject.h>
+#import <QTKit/QTCaptureDecompressedVideoOutput.h>
+#import <QTKit/QTCaptureConnection.h>
+#import <QTKit/QTCaptureOutput.h>
+#import <QTKit/QTSampleBuffer.h>
+#import <stdint.h>
+
+@interface QTCaptureDecompressedVideoOutputDelegate : NSObject
+{
+@private
+    jobject _delegate;
+    JavaVM *_vm;
+}
+
+- (void)captureOutput:(QTCaptureOutput *)captureOutput
+        didOutputVideoFrame:(CVImageBufferRef *)videoFrame
+        withSampleBuffer:(QTSampleBuffer *)sampleBuffer
+        fromConnection:(QTCaptureConnection *)connection;
+- (void)dealloc;
+- (id)init;
+- (void)setDelegate:(jobject)delegate inJNIEnv:(JNIEnv *)jniEnv;
+
+@end
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_allocAndInit
+    (JNIEnv *jniEnv, jclass clazz)
+{
+    NSAutoreleasePool *autoreleasePool;
+    QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput;
+
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    captureDecompressedVideoOutput
+        = [[QTCaptureDecompressedVideoOutput alloc] init];
+
+    [autoreleasePool release];
+    return (jlong) (intptr_t) captureDecompressedVideoOutput;
+}
+
+JNIEXPORT jdouble JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_minimumVideoFrameInterval
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput;
+    NSAutoreleasePool *autoreleasePool;
+    NSTimeInterval minimumVideoFrameInterval;
+
+    captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    minimumVideoFrameInterval
+        = [captureDecompressedVideoOutput minimumVideoFrameInterval];
+
+    [autoreleasePool release];
+    return (jdouble) minimumVideoFrameInterval;
+}
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_pixelBufferAttributes
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput;
+    NSAutoreleasePool *autoreleasePool;
+    NSDictionary *pixelBufferAttributes;
+
+    captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    pixelBufferAttributes
+        = [captureDecompressedVideoOutput pixelBufferAttributes];
+    if (pixelBufferAttributes)
+        [pixelBufferAttributes retain];
+
+    [autoreleasePool release];
+    return (jlong) (intptr_t) pixelBufferAttributes;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setAutomaticallyDropsLateVideoFrames
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr,
+        jboolean automaticallyDropsLateVideoFrames)
+{
+    QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput;
+    NSAutoreleasePool *autoreleasePool;
+
+    captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    if ([captureDecompressedVideoOutput
+            respondsToSelector:@selector(setAutomaticallyDropsLateVideoFrames)])
+    {
+        [captureDecompressedVideoOutput
+            setAutomaticallyDropsLateVideoFrames:
+                ((JNI_TRUE == automaticallyDropsLateVideoFrames) ? YES : NO)];
+        automaticallyDropsLateVideoFrames
+            = [captureDecompressedVideoOutput automaticallyDropsLateVideoFrames];
+    }
+    else
+        automaticallyDropsLateVideoFrames = JNI_FALSE;
+
+    [autoreleasePool release];
+    return automaticallyDropsLateVideoFrames;
+}
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setDelegate
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr, jobject delegate)
+{
+    QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput;
+    NSAutoreleasePool *autoreleasePool;
+    QTCaptureDecompressedVideoOutputDelegate *oDelegate;
+    id oPrevDelegate;
+
+    captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    if (delegate)
+    {
+        oDelegate = [[QTCaptureDecompressedVideoOutputDelegate alloc] init];
+        [oDelegate setDelegate:delegate inJNIEnv:jniEnv];
+    }
+    else
+        oDelegate = nil;
+    oPrevDelegate = [captureDecompressedVideoOutput delegate];
+    if (oDelegate != oPrevDelegate)
+    {
+        [captureDecompressedVideoOutput setDelegate:oDelegate];
+        if (oPrevDelegate)
+            [oPrevDelegate release];
+    }
+
+    [autoreleasePool release];
+}
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setMinimumVideoFrameInterval
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr, jdouble minimumVideoFrameInterval)
+{
+    QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput;
+    NSAutoreleasePool *autoreleasePool;
+
+    captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    [captureDecompressedVideoOutput
+	    setMinimumVideoFrameInterval:(NSTimeInterval)minimumVideoFrameInterval];
+
+    [autoreleasePool release];
+}
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setPixelBufferAttributes
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong pixelBufferAttributesPtr)
+{
+    QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput;
+    NSDictionary *pixelBufferAttributes;
+    NSAutoreleasePool *autoreleasePool;
+
+    captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr;
+    pixelBufferAttributes = (NSDictionary *) (intptr_t) pixelBufferAttributesPtr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    [captureDecompressedVideoOutput
+        setPixelBufferAttributes:pixelBufferAttributes];
+
+    [autoreleasePool release];
+}
+
+@implementation QTCaptureDecompressedVideoOutputDelegate
+
+- (void)captureOutput:(QTCaptureOutput *)captureOutput
+        didOutputVideoFrame:(CVImageBufferRef *)videoFrame
+        withSampleBuffer:(QTSampleBuffer *)sampleBuffer
+        fromConnection:(QTCaptureConnection *)connection
+{
+    jobject delegate;
+    JavaVM *vm;
+    JNIEnv *jniEnv;
+    jclass delegateClass;
+
+    delegate = self->_delegate;
+    if (!delegate)
+        return;
+
+    vm = self->_vm;
+    if (0 != (*vm)->AttachCurrentThreadAsDaemon(vm, (void **) &jniEnv, NULL))
+        return;
+
+    delegateClass = (*jniEnv)->GetObjectClass(jniEnv, delegate);
+    if (delegateClass)
+    {
+        jmethodID didOutputVideoFrameWithSampleBufferMethodID;
+
+        didOutputVideoFrameWithSampleBufferMethodID
+            = (*jniEnv)
+                ->GetMethodID(
+                    jniEnv,
+                    delegateClass,
+                    "outputVideoFrameWithSampleBuffer",
+                    "(JJ)V");
+        if (didOutputVideoFrameWithSampleBufferMethodID)
+            (*jniEnv)->CallVoidMethod(
+                    jniEnv,
+                    delegate,
+                    didOutputVideoFrameWithSampleBufferMethodID,
+                    (jlong) (intptr_t) videoFrame,
+                    (jlong) (intptr_t) sampleBuffer);
+    }
+    (*jniEnv)->ExceptionClear(jniEnv);
+}
+
+- (void)dealloc
+{
+    [self setDelegate:NULL inJNIEnv:NULL];
+    [super dealloc];
+}
+
+- (id)init
+{
+    if ((self = [super init]))
+    {
+        self->_delegate = NULL;
+        self->_vm = NULL;
+    }
+    return self;
+}
+
+- (void)setDelegate:(jobject)delegate inJNIEnv:(JNIEnv *)jniEnv
+{
+    if (self->_delegate)
+    {
+        if (!jniEnv)
+            (*(self->_vm))->AttachCurrentThread(self->_vm, (void **) &jniEnv, NULL);
+        (*jniEnv)->DeleteGlobalRef(jniEnv, self->_delegate);
+        self->_delegate = NULL;
+        self->_vm = NULL;
+    }
+    if (delegate)
+    {
+        delegate = (*jniEnv)->NewGlobalRef(jniEnv, delegate);
+        if (delegate)
+        {
+            (*jniEnv)->GetJavaVM(jniEnv, &(self->_vm));
+            self->_delegate = delegate;
+        }
+    }
+}
+
+@end
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h
new file mode 100644
index 0000000000000000000000000000000000000000..36d3b012783730d0710f86bb6d391eebade998f2
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h
@@ -0,0 +1,76 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_QTCaptureDevice */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+#define _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+ * Method:    close
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_close
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+ * Method:    formatDescriptions
+ * Signature: (J)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_formatDescriptions
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+ * Method:    inputDevicesWithMediaType
+ * Signature: (Ljava/lang/String;)[J
+ */
+JNIEXPORT jlongArray JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_inputDevicesWithMediaType
+  (JNIEnv *, jclass, jstring);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+ * Method:    isConnected
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_isConnected
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+ * Method:    localizedDisplayName
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_localizedDisplayName
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+ * Method:    open
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_open
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDevice
+ * Method:    uniqueID
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_uniqueID
+  (JNIEnv *, jclass, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.m
new file mode 100644
index 0000000000000000000000000000000000000000..255a7738a05c9c4cb639371874bc91b6d236e0f1
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.m
@@ -0,0 +1,204 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h"
+
+#include "common.h"
+
+#include <stdint.h>
+#include <string.h>
+
+#import <Foundation/NSArray.h>
+#import <Foundation/NSAutoreleasePool.h>
+#import <Foundation/NSError.h>
+#import <Foundation/NSObject.h> /* NSSelectorFromString */
+#import <Foundation/NSString.h>
+#import <QTKit/QTCaptureDevice.h>
+#import <QTKit/QTFormatDescription.h>
+#import <QTKit/QTMedia.h>
+
+jstring QTCaptureDevice_getString(JNIEnv *, jlong, NSString *);
+NSString * QTCaptureDevice_jstringToMediaType(JNIEnv *, jobject);
+jlongArray QTCaptureDevice_nsArrayToJlongArray(JNIEnv *, NSArray *);
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_close
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    NSObject_performSelector((id) (intptr_t) ptr, @"close");
+}
+
+JNIEXPORT jlongArray JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_formatDescriptions
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    QTCaptureDevice *captureDevice;
+    NSAutoreleasePool *autoreleasePool;
+    NSArray *formatDescriptions;
+    jlongArray formatDescriptionPtrs;
+
+    captureDevice = (QTCaptureDevice *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    formatDescriptions = [captureDevice formatDescriptions];
+    formatDescriptionPtrs
+        = QTCaptureDevice_nsArrayToJlongArray(jniEnv, formatDescriptions);
+
+    [autoreleasePool release];
+    return formatDescriptionPtrs;
+}
+
+JNIEXPORT jlongArray JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_inputDevicesWithMediaType
+    (JNIEnv *jniEnv, jclass clazz, jstring mediaType)
+{
+    NSAutoreleasePool *autoreleasePool;
+    NSArray *inputDevices;
+    jlongArray inputDevicePtrs;
+
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    inputDevices
+        = [QTCaptureDevice
+            inputDevicesWithMediaType:
+                QTCaptureDevice_jstringToMediaType(jniEnv, mediaType)];
+    inputDevicePtrs = QTCaptureDevice_nsArrayToJlongArray(jniEnv, inputDevices);
+
+    [autoreleasePool release];
+    return inputDevicePtrs;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_isConnected
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    return
+        (YES == (BOOL) (intptr_t) NSObject_performSelector((id) (intptr_t) ptr, @"isConnected"))
+            ? JNI_TRUE
+            : JNI_FALSE;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_localizedDisplayName
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    return QTCaptureDevice_getString (jniEnv, ptr, @"localizedDisplayName");
+}
+
+JNIEXPORT jboolean JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_open
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    QTCaptureDevice *captureDevice;
+    NSAutoreleasePool *autoreleasePool;
+    BOOL ret;
+    NSError *error;
+
+    captureDevice = (QTCaptureDevice *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    ret = [captureDevice open:&error];
+
+    [autoreleasePool release];
+    return (YES == ret) ? JNI_TRUE : JNI_FALSE;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_uniqueID
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    return QTCaptureDevice_getString (jniEnv, ptr, @"uniqueID");
+}
+
+jstring
+QTCaptureDevice_getString(JNIEnv *jniEnv, jlong ptr, NSString *selectorName)
+{
+    id obj;
+    NSAutoreleasePool *autoreleasePool;
+    SEL selector;
+    NSString *str;
+    jstring jstr;
+
+    obj = (id) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    selector = NSSelectorFromString(selectorName);
+    if (selector)
+    {
+        str = [obj performSelector:selector];
+        jstr = str ? (*jniEnv)->NewStringUTF(jniEnv, [str UTF8String]) : NULL;
+    }
+    else
+        jstr = NULL;
+
+    [autoreleasePool release];
+    return jstr;
+}
+
+NSString *
+QTCaptureDevice_jstringToMediaType(JNIEnv *jniEnv, jstring str)
+{
+    const char *cstr;
+    NSString *mediaType;
+
+    cstr = (const char *) (*jniEnv)->GetStringUTFChars (jniEnv, str, NULL);
+    if (cstr)
+    {
+        if (0 == strcmp ("Muxed", cstr))
+            mediaType = QTMediaTypeMuxed;
+        else if (0 == strcmp ("Sound", cstr))
+            mediaType = QTMediaTypeSound;
+        else if (0 == strcmp ("Video", cstr))
+            mediaType = QTMediaTypeVideo;
+        else
+            mediaType = nil;
+        (*jniEnv)->ReleaseStringUTFChars (jniEnv, str, cstr);
+    }
+    else
+        mediaType = nil;
+    return mediaType;
+}
+
+jlongArray
+QTCaptureDevice_nsArrayToJlongArray(JNIEnv *jniEnv, NSArray *oArray)
+{
+    jlongArray jArray;
+
+    if (oArray)
+    {
+        NSUInteger count;
+
+        count = [oArray count];
+        jArray = (*jniEnv)->NewLongArray(jniEnv, count);
+        if (jArray)
+        {
+            NSUInteger i;
+
+            for (i = 0; i < count; i++)
+            {
+                id obj;
+                jlong ptr;
+
+                obj = [oArray objectAtIndex:i];
+                ptr = (jlong) (intptr_t) obj;
+                (*jniEnv)->SetLongArrayRegion(jniEnv, jArray, i, 1, &ptr);
+                [obj retain];
+                if ((*jniEnv)->ExceptionCheck(jniEnv))
+                {
+                    NSUInteger j;
+
+                    for (j = 0; j < i; j++)
+                        [[oArray objectAtIndex:j] release];
+                    break;
+                }
+            }
+        }
+    }
+    else
+        jArray = NULL;
+    return jArray;
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h
new file mode 100644
index 0000000000000000000000000000000000000000..60d6b16f6b0ea8fb6748ed25343bfcb203273fb1
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h
@@ -0,0 +1,28 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput
+#define _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput
+ * Method:    deviceInputWithDevice
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput_deviceInputWithDevice
+  (JNIEnv *, jclass, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.m
new file mode 100644
index 0000000000000000000000000000000000000000..d82539024c75f3f10ffe6e047fa517847b72471a
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.m
@@ -0,0 +1,39 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h"
+
+#import <Foundation/NSException.h>
+#import <QTKit/QTCaptureDevice.h>
+#import <QTKit/QTCaptureDeviceInput.h>
+#include <stdint.h>
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput_deviceInputWithDevice
+    (JNIEnv *jniEnv, jclass clazz, jlong devicePtr)
+{
+    QTCaptureDevice *device;
+    NSAutoreleasePool *autoreleasePool;
+    id deviceInput;
+
+    device = (QTCaptureDevice *) (intptr_t) devicePtr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    @try
+    {
+        deviceInput = [QTCaptureDeviceInput deviceInputWithDevice:device];
+    }
+    @catch (NSException *ex)
+    {
+        deviceInput = nil;
+    }
+    if (deviceInput)
+        [deviceInput retain];
+
+    [autoreleasePool release];
+    return (jlong) (intptr_t) deviceInput;
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.h
new file mode 100644
index 0000000000000000000000000000000000000000..5c83458b64c31b21575d3d4284d66d850370940a
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.h
@@ -0,0 +1,60 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_QTCaptureSession */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureSession
+#define _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureSession
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureSession
+ * Method:    addInput
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_addInput
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureSession
+ * Method:    addOutput
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_addOutput
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureSession
+ * Method:    allocAndInit
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_allocAndInit
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureSession
+ * Method:    startRunning
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_startRunning
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTCaptureSession
+ * Method:    stopRunning
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_stopRunning
+  (JNIEnv *, jclass, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.m
new file mode 100644
index 0000000000000000000000000000000000000000..052bda8fbeb07e26275ebd12ca498018332a2755
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.m
@@ -0,0 +1,86 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_QTCaptureSession.h"
+
+#include "common.h"
+
+#import <Foundation/NSAutoreleasePool.h>
+#import <Foundation/NSError.h>
+#import <QTKit/QTCaptureInput.h>
+#import <QTKit/QTCaptureOutput.h>
+#import <QTKit/QTCaptureSession.h>
+#include <stdint.h>
+
+JNIEXPORT jboolean JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_addInput
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong inputPtr)
+{
+    QTCaptureSession *captureSession;
+    QTCaptureInput *input;
+    NSAutoreleasePool *autoreleasePool;
+    BOOL ret;
+    NSError *error;
+
+    captureSession = (QTCaptureSession *) (intptr_t) ptr;
+    input = (QTCaptureInput *) (intptr_t) inputPtr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    ret = [captureSession addInput:input error:&error];
+
+    [autoreleasePool release];
+    return (YES == ret) ? JNI_TRUE : JNI_FALSE;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_addOutput
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong outputPtr)
+{
+    QTCaptureSession *captureSession;
+    QTCaptureOutput *output;
+    NSAutoreleasePool *autoreleasePool;
+    BOOL ret;
+    NSError *error;
+
+    captureSession = (QTCaptureSession *) (intptr_t) ptr;
+    output = (QTCaptureOutput *) (intptr_t) outputPtr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    ret = [captureSession addOutput:output error:&error];
+
+    [autoreleasePool release];
+    return (YES == ret) ? JNI_TRUE : JNI_FALSE;
+}
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_allocAndInit
+    (JNIEnv *jniEnv, jclass clazz)
+{
+    NSAutoreleasePool *autoreleasePool;
+    QTCaptureSession *captureSession;
+
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    captureSession = [[QTCaptureSession alloc] init];
+
+    [autoreleasePool release];
+    return (jlong) (intptr_t) captureSession;
+}
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_startRunning
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    NSObject_performSelector((id) (intptr_t) ptr, @"startRunning");
+}
+
+JNIEXPORT void JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_stopRunning
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    NSObject_performSelector((id) (intptr_t) ptr, @"stopRunning");
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.h
new file mode 100644
index 0000000000000000000000000000000000000000..d590b3a61baef62229825de8762f5c93e9351dcd
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.h
@@ -0,0 +1,36 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_QTFormatDescription */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTFormatDescription
+#define _Included_org_jitsi_impl_neomedia_quicktime_QTFormatDescription
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTFormatDescription
+ * Method:    sizeForKey
+ * Signature: (JLjava/lang/String;)Ljava/awt/Dimension;
+ */
+JNIEXPORT jobject JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTFormatDescription_sizeForKey
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTFormatDescription
+ * Method:    VideoEncodedPixelsSizeAttribute
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTFormatDescription_VideoEncodedPixelsSizeAttribute
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.m
new file mode 100644
index 0000000000000000000000000000000000000000..13d5a7862f728a83709434f71057856630c1df3c
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.m
@@ -0,0 +1,93 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_QTFormatDescription.h"
+
+#import <Foundation/NSAutoreleasePool.h>
+#import <Foundation/NSGeometry.h>
+#import <Foundation/NSString.h>
+#import <Foundation/NSValue.h>
+#import <QTKit/QTFormatDescription.h>
+#include <stdint.h>
+
+JNIEXPORT jobject JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTFormatDescription_sizeForKey
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr, jstring key)
+{
+    const char *cKey;
+    jobject size = NULL;
+
+    cKey = (const char *) (*jniEnv)->GetStringUTFChars(jniEnv, key, NULL);
+    if (cKey)
+    {
+        QTFormatDescription *formatDescription;
+        NSAutoreleasePool *autoreleasePool;
+        NSString *oKey;
+        NSValue *attribute;
+
+        formatDescription = (QTFormatDescription *) (intptr_t) ptr;
+        autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+        oKey = [NSString stringWithUTF8String:cKey];
+        (*jniEnv)->ReleaseStringUTFChars(jniEnv, key, cKey);
+
+        attribute = [formatDescription attributeForKey:oKey];
+        if (attribute)
+        {
+            NSSize oSize;
+            jclass dimensionClass;
+
+            oSize = [attribute sizeValue];
+
+            dimensionClass = (*jniEnv)->FindClass(jniEnv, "java/awt/Dimension");
+            if (dimensionClass)
+            {
+                jmethodID dimensionCtorMethodID;
+
+                dimensionCtorMethodID
+                    = (*jniEnv)
+                        ->GetMethodID(
+                            jniEnv,
+                            dimensionClass,
+                            "<init>",
+                            "(II)V");
+                if (dimensionCtorMethodID)
+                    size
+                        = (*jniEnv)
+                            ->NewObject(
+                                jniEnv,
+                                dimensionClass,
+                                dimensionCtorMethodID,
+                                (jint) oSize.width,
+                                (jint) oSize.height);
+            }
+        }
+
+        [autoreleasePool release];
+    }
+    return size;
+}
+
+JNIEXPORT jstring JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTFormatDescription_VideoEncodedPixelsSizeAttribute
+    (JNIEnv *jniEnv, jclass clazz)
+{
+    NSAutoreleasePool *autoreleasePool;
+    jstring jstr;
+
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    jstr
+        = (*jniEnv)
+            ->NewStringUTF(
+                jniEnv,
+                [QTFormatDescriptionVideoEncodedPixelsSizeAttribute
+                    UTF8String]);
+
+    [autoreleasePool release];
+    return jstr;
+}
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h
new file mode 100644
index 0000000000000000000000000000000000000000..e78a269429e67448b75a88b20f542a9f89d270b5
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h
@@ -0,0 +1,36 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_jitsi_impl_neomedia_quicktime_QTSampleBuffer */
+
+#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer
+#define _Included_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTSampleBuffer
+ * Method:    bytesForAllSamples
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer_bytesForAllSamples
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     org_jitsi_impl_neomedia_quicktime_QTSampleBuffer
+ * Method:    formatDescription
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer_formatDescription
+  (JNIEnv *, jclass, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.m
new file mode 100644
index 0000000000000000000000000000000000000000..2fe4f7866ef281e79e491d85349ba3c2fdcecef5
--- /dev/null
+++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.m
@@ -0,0 +1,69 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+#include "org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h"
+
+#import <Foundation/NSAutoreleasePool.h>
+#import <QTKit/QTFormatDescription.h>
+#import <QTKit/QTSampleBuffer.h>
+#include <stdint.h>
+
+JNIEXPORT jbyteArray JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer_bytesForAllSamples
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    QTSampleBuffer *sampleBuffer;
+    NSAutoreleasePool *autoreleasePool;
+    NSUInteger lengthForAllSamples;
+    jbyteArray jBytesForAllSamples;
+
+    sampleBuffer = (QTSampleBuffer *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    lengthForAllSamples = [sampleBuffer lengthForAllSamples];
+    if (lengthForAllSamples)
+    {
+        jBytesForAllSamples
+            = (*jniEnv)->NewByteArray(jniEnv, lengthForAllSamples);
+        if (jBytesForAllSamples)
+        {
+            jbyte *bytesForAllSamples = [sampleBuffer bytesForAllSamples];
+
+            (*jniEnv)
+                ->SetByteArrayRegion(
+                    jniEnv,
+                    jBytesForAllSamples,
+                    0,
+                    lengthForAllSamples,
+                    bytesForAllSamples);
+        }
+    }
+    else
+        jBytesForAllSamples = NULL;
+
+    [autoreleasePool release];
+    return jBytesForAllSamples;
+}
+
+JNIEXPORT jlong JNICALL
+Java_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer_formatDescription
+    (JNIEnv *jniEnv, jclass clazz, jlong ptr)
+{
+    QTSampleBuffer *sampleBuffer;
+    NSAutoreleasePool *autoreleasePool;
+    QTFormatDescription *formatDescription;
+
+    sampleBuffer = (QTSampleBuffer *) (intptr_t) ptr;
+    autoreleasePool = [[NSAutoreleasePool alloc] init];
+
+    formatDescription = [sampleBuffer formatDescription];
+    if (formatDescription)
+        [formatDescription retain];
+
+    [autoreleasePool release];
+    return (jlong) (intptr_t) formatDescription;
+}
diff --git a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/video/JAWTRenderer.java b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/video/JAWTRenderer.java
index ba6ab5d0e431ff41c6bbc074e4d7a5f213d36200..07b66f37d45a3fc586c1d6301a5841c621723cbc 100644
--- a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/video/JAWTRenderer.java
+++ b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/video/JAWTRenderer.java
@@ -226,7 +226,10 @@ public synchronized Component getComponent()
         {
             StringBuilder componentClassName = new StringBuilder();
 
-            componentClassName.append(JAWTRenderer.class.getName());
+            componentClassName.append(
+                    "org.jitsi"
+                        + ".impl.neomedia.jmfext.media.renderer.video"
+                        + ".JAWTRenderer");
             if (USE_MACOSX_CALAYERS && OSUtils.IS_MAC)
                 componentClassName.append("Swing");
             else if (OSUtils.IS_ANDROID)
diff --git a/src/org/jitsi/impl/neomedia/device/DeviceConfiguration.java b/src/org/jitsi/impl/neomedia/device/DeviceConfiguration.java
index 3c7c4660d9c6f6b475051ff05932e2a316e7bc1d..8c025e56e4506e13ccfc645ada82dd9181724d78 100644
--- a/src/org/jitsi/impl/neomedia/device/DeviceConfiguration.java
+++ b/src/org/jitsi/impl/neomedia/device/DeviceConfiguration.java
@@ -800,14 +800,14 @@ private void registerCustomRenderers()
         {
             int pluginCount = plugins.size();
             int pluginBeginIndex = 0;
-            String preferred = "org.jitsi.impl.neomedia.";
 
             for (int pluginIndex = pluginCount - 1;
                  pluginIndex >= pluginBeginIndex;)
             {
                 String plugin = plugins.get(pluginIndex);
 
-                if (plugin.startsWith(preferred))
+                if (plugin.startsWith("org.jitsi.")
+                        || plugin.startsWith("net.java.sip.communicator."))
                 {
                     plugins.remove(pluginIndex);
                     plugins.add(0, plugin);
diff --git a/src/org/jitsi/impl/neomedia/device/QuickTimeSystem.java b/src/org/jitsi/impl/neomedia/device/QuickTimeSystem.java
index c1e9f237b8f6f82df1766fc4637fcb286cadbb76..304ad6ad1814cf46531bf259cdce21060d80e8d0 100644
--- a/src/org/jitsi/impl/neomedia/device/QuickTimeSystem.java
+++ b/src/org/jitsi/impl/neomedia/device/QuickTimeSystem.java
@@ -10,7 +10,6 @@
 import javax.media.format.*;
 
 import net.java.sip.communicator.impl.neomedia.codec.*;
-import net.java.sip.communicator.impl.neomedia.quicktime.*;
 
 import org.jitsi.impl.neomedia.*;
 import org.jitsi.impl.neomedia.codec.video.*;
diff --git a/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/DataSource.java b/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/DataSource.java
index 181995444d5ecab8cde48e6ac926e6afa1a667b9..6489cdaba67e10b649a3c69b8b0fb1eb4ec577c0 100644
--- a/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/DataSource.java
+++ b/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/DataSource.java
@@ -16,14 +16,11 @@
 import javax.media.control.*;
 import javax.media.format.*;
 
-import net.java.sip.communicator.impl.neomedia.quicktime.*;
-
 import org.jitsi.impl.neomedia.control.*;
 import org.jitsi.impl.neomedia.device.*;
 import org.jitsi.impl.neomedia.jmfext.media.protocol.*;
 import org.jitsi.impl.neomedia.quicktime.*;
 import org.jitsi.util.*;
-// disambiguation
 
 /**
  * Implements a <tt>PushBufferDataSource</tt> and <tt>CaptureDevice</tt> using
diff --git a/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/QuickTimeStream.java b/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/QuickTimeStream.java
index 2e1b66643e8a623cb59894aedd104c9d35bf738f..f148b873e1720263e6e48e0421f9ad79a9660cc6 100644
--- a/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/QuickTimeStream.java
+++ b/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/QuickTimeStream.java
@@ -15,7 +15,6 @@
 import javax.media.protocol.*;
 
 import net.java.sip.communicator.impl.neomedia.codec.*;
-import net.java.sip.communicator.impl.neomedia.quicktime.*;
 
 import org.jitsi.impl.neomedia.*;
 import org.jitsi.impl.neomedia.codec.video.*;
diff --git a/src/org/jitsi/impl/neomedia/jmfext/media/renderer/video/JAWTRendererVideoComponent.java b/src/org/jitsi/impl/neomedia/jmfext/media/renderer/video/JAWTRendererVideoComponent.java
index 7c3977dfc3844cfd639f9f0ac785d3edb1545f6f..e8b1b0899aa53e4557bea13e37a91a133a529106 100644
--- a/src/org/jitsi/impl/neomedia/jmfext/media/renderer/video/JAWTRendererVideoComponent.java
+++ b/src/org/jitsi/impl/neomedia/jmfext/media/renderer/video/JAWTRendererVideoComponent.java
@@ -57,6 +57,11 @@ public JAWTRendererVideoComponent(JAWTRenderer renderer)
         this.renderer = renderer;
     }
 
+    /**
+     * Overrides {@link Component#addNotify()} to reset the indicator which
+     * determines whether the native counterpart of this <tt>JAWTRenderer</tt>
+     * wants <tt>paint</tt> calls on its AWT <tt>Component</tt> to be delivered.
+     */
     @Override
     public void addNotify()
     {
@@ -90,6 +95,10 @@ protected Object getHandleLock()
         return renderer.getHandleLock();
     }
 
+    /**
+     * Overrides {@link Canvas#paint(Graphics)} to paint this <tt>Component</tt>
+     * in the native counterpart of its associated <tt>JAWTRenderer</tt>.
+     */
     @Override
     public void paint(Graphics g)
     {
@@ -105,6 +114,11 @@ public void paint(Graphics g)
         }
     }
 
+    /**
+     * Overrides {@link Component#removeNotify()} to reset the indicator which
+     * determines whether the native counterpart of this <tt>JAWTRenderer</tt>
+     * wants <tt>paint</tt> calls on its AWT <tt>Component</tt> to be delivered.
+     */
     @Override
     public void removeNotify()
     {
@@ -118,6 +132,10 @@ public void removeNotify()
         super.removeNotify();
     }
 
+    /**
+     * Overrides {@link Canvas#update(Graphics)} to skip the filling with the
+     * background color in order to prevent flickering.
+     */
     @Override
     public void update(Graphics g)
     {
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVImageBuffer.java b/src/org/jitsi/impl/neomedia/quicktime/CVImageBuffer.java
similarity index 95%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/CVImageBuffer.java
rename to src/org/jitsi/impl/neomedia/quicktime/CVImageBuffer.java
index 21fb32b3149211fc7f651b30b208cb5239a5d482..d17a18aad6828b825bc577344ffa94e115bfcff7 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVImageBuffer.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/CVImageBuffer.java
@@ -4,7 +4,7 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents a CoreVideo <tt>CVImageBufferRef</tt>.
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBuffer.java b/src/org/jitsi/impl/neomedia/quicktime/CVPixelBuffer.java
similarity index 98%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBuffer.java
rename to src/org/jitsi/impl/neomedia/quicktime/CVPixelBuffer.java
index ee6fa7cfcd21f174f1c7884ceb57cb17735442ff..cf96fa51eeedad9aeb892647ee2ed772e3e560c4 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBuffer.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/CVPixelBuffer.java
@@ -4,12 +4,12 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents a CoreVideo <tt>CVPixelBufferRef</tt>.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class CVPixelBuffer
     extends CVImageBuffer
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java b/src/org/jitsi/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java
similarity index 94%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java
rename to src/org/jitsi/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java
index 8ae76e9d62930bd2a75bc0e8f7c4a67540bce532..0a90d489b6e0db3a1655cb992f3c31215ed3a811 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java
@@ -4,7 +4,7 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * @author Lyubomir Marinov
diff --git a/src/org/jitsi/impl/neomedia/quicktime/CVPixelFormatType.java b/src/org/jitsi/impl/neomedia/quicktime/CVPixelFormatType.java
index aeba6d60fad677df4463a0cdf675dddca030f181..ed967b6b0ceb72b6eeae76b87ece0b1a704c7c5e 100644
--- a/src/org/jitsi/impl/neomedia/quicktime/CVPixelFormatType.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/CVPixelFormatType.java
@@ -10,7 +10,7 @@
  * Defines the types of <tt>CVPixelBuffer</tt>s to be output by
  * <tt>QTCaptureDecompressedVideoOutput</tt>.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public final class CVPixelFormatType
 {
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSDictionary.java b/src/org/jitsi/impl/neomedia/quicktime/NSDictionary.java
similarity index 92%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/NSDictionary.java
rename to src/org/jitsi/impl/neomedia/quicktime/NSDictionary.java
index 44749f71ef8229d35d25676532b240901f4ca289..0f3a608ba04f640b12ce92f80bfd0bc8de306b51 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSDictionary.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/NSDictionary.java
@@ -4,12 +4,12 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents an Objective-C <tt>NSDictionary</tt> object.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class NSDictionary
     extends NSObject
diff --git a/src/org/jitsi/impl/neomedia/quicktime/NSError.java b/src/org/jitsi/impl/neomedia/quicktime/NSError.java
index 9bc7761f36021e1b383a543382866130a28df301..ad65eb698fe421a9c429ca83b2e6e1edcd831a22 100644
--- a/src/org/jitsi/impl/neomedia/quicktime/NSError.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/NSError.java
@@ -6,12 +6,10 @@
  */
 package org.jitsi.impl.neomedia.quicktime;
 
-import net.java.sip.communicator.impl.neomedia.quicktime.*;
-
 /**
  * Represents an Objective-C <tt>NSError</tt> object.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class NSError
     extends NSObject
diff --git a/src/org/jitsi/impl/neomedia/quicktime/NSErrorException.java b/src/org/jitsi/impl/neomedia/quicktime/NSErrorException.java
index 74f30f86ed30425a9a103eb1abc1ecf014b323a7..f7bf5cc401244ff235bfa66efcf2272eee25e888 100644
--- a/src/org/jitsi/impl/neomedia/quicktime/NSErrorException.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/NSErrorException.java
@@ -9,7 +9,7 @@
 /**
  * Defines an <tt>Exception</tt> which reports an <tt>NSError</tt>.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class NSErrorException
     extends Exception
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSMutableDictionary.java b/src/org/jitsi/impl/neomedia/quicktime/NSMutableDictionary.java
similarity index 92%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/NSMutableDictionary.java
rename to src/org/jitsi/impl/neomedia/quicktime/NSMutableDictionary.java
index 73f9bbfe0931b64e57e6b1db926bd3f4c81d1695..361661d6e8607c1aaba0161330c8c8c72a81be6e 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSMutableDictionary.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/NSMutableDictionary.java
@@ -4,12 +4,12 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents an Objective-C <tt>NSMutableDictionary</tt> object.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class NSMutableDictionary
     extends NSDictionary
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSObject.java b/src/org/jitsi/impl/neomedia/quicktime/NSObject.java
similarity index 97%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/NSObject.java
rename to src/org/jitsi/impl/neomedia/quicktime/NSObject.java
index bcb8513ed44c1bdbc2f78a7f3f786cc883417fc1..0dfac8b5a895609ab5f35045d4f2d2ca1cb590b2 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSObject.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/NSObject.java
@@ -4,7 +4,7 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents the root of most Objective-C class hierarchies which which objects
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java
similarity index 98%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java
rename to src/org/jitsi/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java
index 8ee392f0c4fe216d61ad1c33b70e734d342352a1..ec812f4cb088c2e0a40619e80bfff68009c2f2d1 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java
@@ -4,9 +4,7 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
-
-import org.jitsi.impl.neomedia.quicktime.*;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents a QTKit <tt>QTCaptureDecompressedVideoOutput</tt> object.
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDevice.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDevice.java
similarity index 98%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDevice.java
rename to src/org/jitsi/impl/neomedia/quicktime/QTCaptureDevice.java
index 7abae1bacefe512f560eed66df3e878d04169705..3a526ba882c597353d6873de4b6c41672315d278 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDevice.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDevice.java
@@ -4,17 +4,15 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 import java.util.*;
 
-import org.jitsi.impl.neomedia.quicktime.*;
-
 /**
  * Represents a QTKit capture device which is connected or has been previously
  * connected to the user's computer during the lifetime of the application.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class QTCaptureDevice
     extends NSObject
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDeviceInput.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDeviceInput.java
similarity index 90%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDeviceInput.java
rename to src/org/jitsi/impl/neomedia/quicktime/QTCaptureDeviceInput.java
index 4b683e8d13f15e6fba4272e910aab712e4b14837..42d7c9ddc058e140a518ea9bda5a703c7f2f6f98 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDeviceInput.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDeviceInput.java
@@ -4,14 +4,12 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
-
-import org.jitsi.impl.neomedia.quicktime.*;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents a QTKit <tt>QTCaptureDeviceInput</tt> object.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class QTCaptureDeviceInput
     extends QTCaptureInput
diff --git a/src/org/jitsi/impl/neomedia/quicktime/QTCaptureInput.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureInput.java
index 20a75fb0de4e7cb0a4fc28f4b211b3d159e92c32..37e05356d228570912511052ed72e228a3832dda 100644
--- a/src/org/jitsi/impl/neomedia/quicktime/QTCaptureInput.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureInput.java
@@ -6,12 +6,10 @@
  */
 package org.jitsi.impl.neomedia.quicktime;
 
-import net.java.sip.communicator.impl.neomedia.quicktime.*;
-
 /**
  * Represents a QTKit <tt>QTCaptureInput</tt> object.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class QTCaptureInput
     extends NSObject
diff --git a/src/org/jitsi/impl/neomedia/quicktime/QTCaptureOutput.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureOutput.java
index b737d4fb9068095ed589ea4f3ee779a292957f54..3a6ff656c5b2bba23d08759d710e255ea7a0559e 100644
--- a/src/org/jitsi/impl/neomedia/quicktime/QTCaptureOutput.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureOutput.java
@@ -6,12 +6,10 @@
  */
 package org.jitsi.impl.neomedia.quicktime;
 
-import net.java.sip.communicator.impl.neomedia.quicktime.*;
-
 /**
  * Represents a QTKit <tt>QTCaptureOutput</tt> object.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class QTCaptureOutput
     extends NSObject
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureSession.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureSession.java
similarity index 94%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureSession.java
rename to src/org/jitsi/impl/neomedia/quicktime/QTCaptureSession.java
index 1eac56ee3b4a6b91a00e885ae1fa0fdfb773cd8b..2d61345f9ba2995cfa157fdfcb5c15eddaa3db33 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureSession.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureSession.java
@@ -4,14 +4,12 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
-
-import org.jitsi.impl.neomedia.quicktime.*;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents a QTKit <tt>QTCaptureSession</tt> object.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class QTCaptureSession
     extends NSObject
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTFormatDescription.java b/src/org/jitsi/impl/neomedia/quicktime/QTFormatDescription.java
similarity index 94%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTFormatDescription.java
rename to src/org/jitsi/impl/neomedia/quicktime/QTFormatDescription.java
index 006d0dfc35f16d2d8b98754b2a2a31abf29e5ee5..056bd41b4324f872cc090a145bba3c1842e253f7 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTFormatDescription.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTFormatDescription.java
@@ -4,7 +4,7 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 import java.awt.*;
 
@@ -14,7 +14,7 @@
  * such as media type and format type (or codec type), as well as extended
  * information specific to each media type.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class QTFormatDescription
     extends NSObject
diff --git a/src/org/jitsi/impl/neomedia/quicktime/QTMediaType.java b/src/org/jitsi/impl/neomedia/quicktime/QTMediaType.java
index 3f0d0af3ec39575b7db1a052e792fb65501ea3a2..917ae0f5f228f6464e60ab7cef70dce49dc63ac3 100644
--- a/src/org/jitsi/impl/neomedia/quicktime/QTMediaType.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTMediaType.java
@@ -9,7 +9,7 @@
 /**
  * Enumerates the QTKit media types.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public enum QTMediaType
 {
diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTSampleBuffer.java b/src/org/jitsi/impl/neomedia/quicktime/QTSampleBuffer.java
similarity index 92%
rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTSampleBuffer.java
rename to src/org/jitsi/impl/neomedia/quicktime/QTSampleBuffer.java
index 8c7425ac693392ff9b2554eb1d8e20112c4d73ac..425d6fe60e2bb02b56fc90933e1d1d56305c6bc7 100644
--- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTSampleBuffer.java
+++ b/src/org/jitsi/impl/neomedia/quicktime/QTSampleBuffer.java
@@ -4,12 +4,12 @@
  * Distributable under LGPL license.
  * See terms of license at gnu.org.
  */
-package net.java.sip.communicator.impl.neomedia.quicktime;
+package org.jitsi.impl.neomedia.quicktime;
 
 /**
  * Represents a QuickTime/QTKit <tt>QTSampleBuffer</tt> object.
  *
- * @author Lubomir Marinov
+ * @author Lyubomir Marinov
  */
 public class QTSampleBuffer
     extends NSObject
diff --git a/src/org/jitsi/util/swing/VideoLayout.java b/src/org/jitsi/util/swing/VideoLayout.java
index 5ee6724ce5bf62614986dd6276fb98b16a9b87dc..3ff9c2b7be7ba1d71008f913eb10d7d40a5c9370 100644
--- a/src/org/jitsi/util/swing/VideoLayout.java
+++ b/src/org/jitsi/util/swing/VideoLayout.java
@@ -19,7 +19,8 @@
  * @author Lyubomir Marinov
  * @author Yana Stamcheva
  */
-public class VideoLayout extends FitLayout
+public class VideoLayout
+    extends FitLayout
 {
     /**
      * The video canvas constraint.
@@ -97,8 +98,6 @@ public class VideoLayout extends FitLayout
      */
     public VideoLayout(boolean isConference)
     {
-        super();
-
         this.isConference = isConference;
     }
 
@@ -149,11 +148,11 @@ else if (name.equals(CANVAS))
      */
     private int calculateColumnCount(List<Component> remotes)
     {
-        int remotesCount = remotes.size();
+        int remoteCount = remotes.size();
 
-        if (remotesCount == 1)
+        if (remoteCount == 1)
             return 1;
-        else if (remotesCount == 2 || remotesCount == 4)
+        else if ((remoteCount == 2) || (remoteCount == 4))
             return 2;
         else
             return 3;
@@ -295,6 +294,7 @@ else if (remoteCount > 0)
                     = Math.round(parentSize.height * LOCAL_TO_REMOTE_RATIO);
                 int width
                     = Math.round(parentSize.width * LOCAL_TO_REMOTE_RATIO);
+                float alignmentX;
 
                 /*
                  * XXX The remote Component being a JLabel is meant to signal
@@ -303,25 +303,21 @@ else if (remoteCount > 0)
                  */
                 if ((remotes.size() == 1) && (remote0 instanceof JLabel))
                 {
-                    localX = parentSize.width/2 - width/2;
+                    localX = (parentSize.width - width) / 2;
                     localY = parentSize.height - height;
-                    super.layoutComponent(
-                            local,
-                            new Rectangle(localX, localY, width, height),
-                            Component.CENTER_ALIGNMENT,
-                            Component.BOTTOM_ALIGNMENT);
+                    alignmentX = Component.CENTER_ALIGNMENT;
                 }
                 else
                 {
                     localX = ((remote0 == null) ? 0 : remote0.getX()) + 5;
                     localY = parentSize.height - height - 5;
-
-                    super.layoutComponent(
-                            local,
-                            new Rectangle(localX, localY, width, height),
-                            Component.LEFT_ALIGNMENT,
-                            Component.BOTTOM_ALIGNMENT);
+                    alignmentX = Component.LEFT_ALIGNMENT;
                 }
+                super.layoutComponent(
+                        local,
+                        new Rectangle(localX, localY, width, height),
+                        alignmentX,
+                        Component.BOTTOM_ALIGNMENT);
             }
 
             if (closeButton != null)