diff --git a/.gitignore b/.gitignore
index 90533bcd3..a828f2014 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,8 +19,9 @@ spine-cpp/Debug/*
spine-sfml/Debug/*
spine-sfml/SFML
-spine-libgdx/bin/*
-spine-libgdx/libs/*
+spine-libgdx/spine-libgdx/bin/*
+spine-libgdx/spine-libgdx-tests/bin/*
+spine-libgdx/spine-skeletonviewer/bin/*
spine-cocos2dx/2/cocos2dx/
!spine-cocos2dx/2/cocos2dx/Place cocos2dx here.txt
diff --git a/spine-libgdx/.classpath b/spine-libgdx/spine-libgdx-tests/.classpath
similarity index 88%
rename from spine-libgdx/.classpath
rename to spine-libgdx/spine-libgdx-tests/.classpath
index 4a5479599..7bfaa23b1 100644
--- a/spine-libgdx/.classpath
+++ b/spine-libgdx/spine-libgdx-tests/.classpath
@@ -2,10 +2,10 @@
-
+
diff --git a/spine-libgdx/spine-libgdx-tests/.project b/spine-libgdx/spine-libgdx-tests/.project
new file mode 100644
index 000000000..263966f61
--- /dev/null
+++ b/spine-libgdx/spine-libgdx-tests/.project
@@ -0,0 +1,17 @@
+
+
+ spine-libgdx-tests
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/spine-libgdx/.settings/org.eclipse.jdt.core.prefs b/spine-libgdx/spine-libgdx-tests/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from spine-libgdx/.settings/org.eclipse.jdt.core.prefs
rename to spine-libgdx/spine-libgdx-tests/.settings/org.eclipse.jdt.core.prefs
diff --git a/spine-libgdx/assets/goblins/goblins-mesh.atlas b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.atlas
similarity index 100%
rename from spine-libgdx/assets/goblins/goblins-mesh.atlas
rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.atlas
diff --git a/spine-libgdx/assets/goblins/goblins-mesh.json b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.json
similarity index 100%
rename from spine-libgdx/assets/goblins/goblins-mesh.json
rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.json
diff --git a/spine-libgdx/assets/goblins/goblins-mesh.png b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.png
similarity index 100%
rename from spine-libgdx/assets/goblins/goblins-mesh.png
rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.png
diff --git a/spine-libgdx/assets/goblins/goblins-mesh.skel b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.skel
similarity index 100%
rename from spine-libgdx/assets/goblins/goblins-mesh.skel
rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.skel
diff --git a/spine-libgdx/assets/goblins/goblins.atlas b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.atlas
similarity index 100%
rename from spine-libgdx/assets/goblins/goblins.atlas
rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.atlas
diff --git a/spine-libgdx/assets/goblins/goblins.json b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.json
similarity index 100%
rename from spine-libgdx/assets/goblins/goblins.json
rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.json
diff --git a/spine-libgdx/assets/goblins/goblins.png b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.png
similarity index 100%
rename from spine-libgdx/assets/goblins/goblins.png
rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.png
diff --git a/spine-libgdx/assets/goblins/goblins.skel b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.skel
similarity index 100%
rename from spine-libgdx/assets/goblins/goblins.skel
rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.skel
diff --git a/spine-libgdx/assets/raptor/raptor.atlas b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.atlas
similarity index 100%
rename from spine-libgdx/assets/raptor/raptor.atlas
rename to spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.atlas
diff --git a/spine-libgdx/assets/raptor/raptor.json b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.json
similarity index 100%
rename from spine-libgdx/assets/raptor/raptor.json
rename to spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.json
diff --git a/spine-libgdx/assets/raptor/raptor.png b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.png
similarity index 100%
rename from spine-libgdx/assets/raptor/raptor.png
rename to spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.png
diff --git a/spine-libgdx/assets/raptor/raptor.skel b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.skel
similarity index 100%
rename from spine-libgdx/assets/raptor/raptor.skel
rename to spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.skel
diff --git a/spine-libgdx/assets/spineboy/spineboy-old-diffuse.atlas b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.atlas
similarity index 100%
rename from spine-libgdx/assets/spineboy/spineboy-old-diffuse.atlas
rename to spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.atlas
diff --git a/spine-libgdx/assets/spineboy/spineboy-old-diffuse.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.png
similarity index 100%
rename from spine-libgdx/assets/spineboy/spineboy-old-diffuse.png
rename to spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.png
diff --git a/spine-libgdx/assets/spineboy/spineboy-old-normal.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-normal.png
similarity index 100%
rename from spine-libgdx/assets/spineboy/spineboy-old-normal.png
rename to spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-normal.png
diff --git a/spine-libgdx/assets/spineboy/spineboy-old.json b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old.json
similarity index 100%
rename from spine-libgdx/assets/spineboy/spineboy-old.json
rename to spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old.json
diff --git a/spine-libgdx/assets/spineboy/spineboy.atlas b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.atlas
similarity index 100%
rename from spine-libgdx/assets/spineboy/spineboy.atlas
rename to spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.atlas
diff --git a/spine-libgdx/assets/spineboy/spineboy.json b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.json
similarity index 100%
rename from spine-libgdx/assets/spineboy/spineboy.json
rename to spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.json
diff --git a/spine-libgdx/assets/spineboy/spineboy.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.png
similarity index 100%
rename from spine-libgdx/assets/spineboy/spineboy.png
rename to spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.png
diff --git a/spine-libgdx/assets/spineboy/spineboy.skel b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.skel
similarity index 100%
rename from spine-libgdx/assets/spineboy/spineboy.skel
rename to spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.skel
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/AttachmentTimelineTests.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AttachmentTimelineTests.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/AttachmentTimelineTests.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AttachmentTimelineTests.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/Box2DExample.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/Box2DExample.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/EventTimelineTests.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/EventTimelineTests.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/EventTimelineTests.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/EventTimelineTests.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/IkTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IkTest.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/IkTest.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IkTest.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/MixTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixTest.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/MixTest.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixTest.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/NormalMapTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/NormalMapTest.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/SimpleTest1.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/SimpleTest1.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/SimpleTest2.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/SimpleTest2.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/SimpleTest3.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/SimpleTest3.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/SkeletonAttachmentTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/SkeletonAttachmentTest.java
rename to spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java
diff --git a/spine-libgdx/spine-libgdx/.classpath b/spine-libgdx/spine-libgdx/.classpath
new file mode 100644
index 000000000..ee6f3e443
--- /dev/null
+++ b/spine-libgdx/spine-libgdx/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/spine-libgdx/.project b/spine-libgdx/spine-libgdx/.project
similarity index 100%
rename from spine-libgdx/.project
rename to spine-libgdx/spine-libgdx/.project
diff --git a/spine-libgdx/spine-libgdx/.settings/org.eclipse.jdt.core.prefs b/spine-libgdx/spine-libgdx/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..6a57c0f46
--- /dev/null
+++ b/spine-libgdx/spine-libgdx/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,99 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/spine-libgdx/src/com/esotericsoftware/spine.gwt.xml b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine.gwt.xml
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine.gwt.xml
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine.gwt.xml
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/Animation.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/Animation.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java
similarity index 99%
rename from spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java
index a298b2982..6872822f1 100644
--- a/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java
+++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java
@@ -304,7 +304,7 @@ public class AnimationState {
TrackEntry next, previous;
Animation animation;
boolean loop;
- float delay, time, lastTime = -1, endTime, timeScale = 1;
+ float delay, time, lastTime = 0, endTime, timeScale = 1;
float mixTime, mixDuration;
AnimationStateListener listener;
float mix = 1;
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/AnimationStateData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationStateData.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/AnimationStateData.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationStateData.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/AnimationStatePR.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationStatePR.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/AnimationStatePR.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationStatePR.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/Bone.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/Bone.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/BoneData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BoneData.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/BoneData.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/BoneData.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/Event.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/Event.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/EventData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/EventData.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBounds.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBounds.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/SkeletonBounds.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBounds.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonData.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/SkeletonData.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonData.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRendererDebug.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRendererDebug.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/SkeletonRendererDebug.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRendererDebug.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/Skin.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skin.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/Skin.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skin.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/Slot.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slot.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/Slot.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slot.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SlotData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SlotData.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/SlotData.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SlotData.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AtlasAttachmentLoader.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/Attachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Attachment.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/Attachment.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/Attachment.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentLoader.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentLoader.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentLoader.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentLoader.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentType.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentType.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentType.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/AttachmentType.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/BoundingBoxAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/BoundingBoxAttachment.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/BoundingBoxAttachment.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/BoundingBoxAttachment.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/MeshAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/MeshAttachment.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/MeshAttachment.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/MeshAttachment.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionSequenceAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionSequenceAttachment.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionSequenceAttachment.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionSequenceAttachment.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkeletonAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkeletonAttachment.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/SkeletonAttachment.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkeletonAttachment.java
diff --git a/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkinnedMeshAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkinnedMeshAttachment.java
similarity index 100%
rename from spine-libgdx/src/com/esotericsoftware/spine/attachments/SkinnedMeshAttachment.java
rename to spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/SkinnedMeshAttachment.java
diff --git a/spine-libgdx/spine-skeletonviewer/.classpath b/spine-libgdx/spine-skeletonviewer/.classpath
new file mode 100644
index 000000000..22cde12f4
--- /dev/null
+++ b/spine-libgdx/spine-skeletonviewer/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/spine-libgdx/spine-skeletonviewer/.project b/spine-libgdx/spine-skeletonviewer/.project
new file mode 100644
index 000000000..7d23d2a34
--- /dev/null
+++ b/spine-libgdx/spine-skeletonviewer/.project
@@ -0,0 +1,17 @@
+
+
+ spine-skeletonviewer
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/spine-libgdx/spine-skeletonviewer/.settings/org.eclipse.jdt.core.prefs b/spine-libgdx/spine-skeletonviewer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..6a57c0f46
--- /dev/null
+++ b/spine-libgdx/spine-skeletonviewer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,99 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/spine-libgdx/spine-skeletonviewer/README.md b/spine-libgdx/spine-skeletonviewer/README.md
new file mode 100644
index 000000000..06d84e042
--- /dev/null
+++ b/spine-libgdx/spine-skeletonviewer/README.md
@@ -0,0 +1,3 @@
+# spine-skeletonviewer
+
+Please see the [Skeleton Viewer documentation](http://esotericsoftware.com/spine-skeleton-viewer).
\ No newline at end of file
diff --git a/spine-libgdx/assets/skin/skin.atlas b/spine-libgdx/spine-skeletonviewer/assets/skin/skin.atlas
similarity index 100%
rename from spine-libgdx/assets/skin/skin.atlas
rename to spine-libgdx/spine-skeletonviewer/assets/skin/skin.atlas
diff --git a/spine-libgdx/assets/skin/skin.json b/spine-libgdx/spine-skeletonviewer/assets/skin/skin.json
similarity index 100%
rename from spine-libgdx/assets/skin/skin.json
rename to spine-libgdx/spine-skeletonviewer/assets/skin/skin.json
diff --git a/spine-libgdx/assets/skin/skin.png b/spine-libgdx/spine-skeletonviewer/assets/skin/skin.png
similarity index 100%
rename from spine-libgdx/assets/skin/skin.png
rename to spine-libgdx/spine-skeletonviewer/assets/skin/skin.png
diff --git a/spine-libgdx/test/com/esotericsoftware/spine/SkeletonViewer.java b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java
similarity index 100%
rename from spine-libgdx/test/com/esotericsoftware/spine/SkeletonViewer.java
rename to spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/SkeletonViewer.java